Mang @ 2019-07-18 18:50:39
int main()
{
int A,B,C,b,c,m,n=0;
double x;
scanf("%d%d%d",&A,&B,&C);
for(int i=123;i<=987;i++)
{
x=i%A;
b=xB;
c=xC;
if((i/100)(i%100/10)(i%10)(b/100)(b%100/10)(b%10)(c/100)(c%100/10)(c%10)==362880)
{
m= i/100+i%100/10+i%10+b/100+b%100/10+b%10+c/100+c%100/10+c%10;
if(m==45)
{
printf("%d %d %d\n",i,b,c);
n++;
}
}
}
if(n==0)
printf("No!!!");
return 0;
}
by Mang @ 2019-07-18 18:55:16
其实就是不明白,定义一个浮点型的x记录输出的第一个数字除以A的值,例如132/123=1.07317073.... 为什么最后一个点会wa 然后输出 132 456 789 213 456 789 。。。。 这类错误数据
by Mang @ 2019-07-18 18:58:20
我的思路还是很简单的,就是穷举123到987,然后先乘出对应的比例关系,判断每一位是否为123456789,用了一个乘积,和和来判断。但,不明白,当输入为123 456 789的时候要怎么解决
by 冥诺在线发呆 @ 2019-07-18 19:06:05
希望更丰富的展现?使用Markdown
by 失笑喷饭满案 @ 2019-07-19 18:55:57
我也是最后一个出了问题,我前面都是用的整型判断的,为了最后一个添加了一个浮点的判断。
if((float)one/propA==(float)two/propB&&(float)three/propC==(float)two/propB){}
完整代码如下:
#include <iostream>
using namespace std;
bool check(int i,int j,int k){
bool flag[10]={false};
int index=100;
for(index=100;index>=1;index/=10){
flag[i/index]=true;
i-=index*(i/index);
flag[j/index]=true;
j-=index*(j/index);
flag[k/index]=true;
k-=index*(k/index);
}
for(int i=1;i<10;i++){
if(!flag[i])return false;
}
return true;
}
int main(){
int one,two,three;
int propA,propB,propC;
cin>>propA>>propB>>propC;
bool flag=false;
for(int i=123;i<=987;i++){
one=i;
two=(i/propA)*propB;
three=(i/propA)*propC;
if(two<=987&&three<=987&&check(one,two,three)&&(float)one/propA==(float)two/propB&&(float)three/propC==(float)two/propB){
flag=true;
cout<<one<<" "<<two<<" "<<three<<endl;
}
}
if(!flag){
cout<<"No!!!";
}
return 0;
}
by 闲鱼 @ 2019-08-01 17:08:31
用double强制转换