注意特判0.
如果你(RE):
#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int cnt[100];
bool check(int x)
{
if(b*x%a!=0) return false;
int y=b*x/a;
if(c*y%b!=0) return false;
int z=c*y/b;
if(y<100||y>999) return false;
if(z<100||z>999) return false;
int x_=x,y_=y,z_=z;
memset(cnt,0,sizeof(cnt));
cnt[x%10]++;
x/=10;
cnt[y%10]++;
y/=10;
cnt[z%10]++;
z/=10;
cnt[x%10]++;
x/=10;
cnt[y%10]++;
y/=10;
cnt[z%10]++;
z/=10;
cnt[x%10]++;
x/=10;
cnt[y%10]++;
y/=10;
cnt[z%10]++;
z/=10;
for(int i=1;i<=9;i++){
if(cnt[i]!=1)
return false;
}
cout<<x_<<" "<<y_<<" "<<z_<<endl;
return true;
}
int main()
{
cin>>a>>b>>c;
int win=0;
for(int i=123; i<=987; i++) {
if(check(i))
win++;
}
if(win==0){
cout<<"No!!!";
}
return 0;
}
因为在上述代码中,作为除数的a
和b
不能为0,否则会RE。
AC Code:
#include<bits/stdc++.h>
using namespace std;
int a,b,c;
int cnt[100];
bool check(int x)
{
if(a==0||b==0) return false;
if(b*x%a!=0) return false;
int y=b*x/a;
if(c*y%b!=0) return false;
int z=c*y/b;
if(y<100||y>999) return false;
if(z<100||z>999) return false;
int x_=x,y_=y,z_=z;
memset(cnt,0,sizeof(cnt));
cnt[x%10]++;
x/=10;
cnt[y%10]++;
y/=10;
cnt[z%10]++;
z/=10;
cnt[x%10]++;
x/=10;
cnt[y%10]++;
y/=10;
cnt[z%10]++;
z/=10;
cnt[x%10]++;
x/=10;
cnt[y%10]++;
y/=10;
cnt[z%10]++;
z/=10;
for(int i=1;i<=9;i++){
if(cnt[i]!=1)
return false;
}
cout<<x_<<" "<<y_<<" "<<z_<<endl;
return true;
}
int main()
{
cin>>a>>b>>c;
int win=0;
for(int i=123; i<=987; i++) {
if(check(i))
win++;
}
if(win==0){
cout<<"No!!!";
}
return 0;
}