#include <stdio.h>
int main()
{
int a,b,c;
for(a=123;a<=333;a++)
{
b=a*2;
c=a*3;
if((a/100+a/10%10+a%10+b/100+b/10%10+b%10+c/100+c/10%10+c%10==1+2+3+4+5+6+7+8+9)&&((a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*(b%10)*(c/100)*(c/10%10)*(c%10)==(1)*(2)*(3)*(4)*(5)*(6)*(7)*(8)*(9)))
printf("%d %d %d\n",a,b,c);
}
return 0;
}
上面是题解最优,思路就是两集合内元素各自相加相乘都相等,则这两集合相同个人总结:
因为只有三位数,故
a/100,取最左边数字
a/10%10,取中间数字
a%10 取最右边数字
#include<stdio.h>
#include<stdio.h>
int main()
{
int a,b,c,d,e,f,g,h,k;
int i,n;
int number1,number2,number3;
for(a=1;a<10;a++){
for(b=1;b<10;b++){
for(c=1;c<10;c++){
for(d=1;d<10;d++){
for(e=1;e<10;e++){
for(f=1;f<10;f++){
for(g=1;g<10;g++){
for(h=1;h<10;h++){
for(k=1;k<10;k++){
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&a!=k&&
b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h&&b!=k&&
c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&c!=k&&
d!=e&&d!=f&&d!=g&&d!=h&&d!=k&&
e!=f&&e!=g&&e!=h&&e!=k&&
f!=g&&f!=h&&f!=k&&
g!=h&&g!=k&&
h!=k){
if(2*(g*100+h*10+k)==(d*100+e*10+f)&&
(a*100+b*10+c)==3*(g*100+h*10+k)){
printf("%d %d %d\n",(g*100+h*10+k),(d*100+e*10+f),(a*100+b*10+c));
}
}
}
}
}
}
}
}
}
}
}
}
这是我的傻瓜式题解,交上去还是超时了,直接暴力题解 。就像是恺翁的买糖果种类得到启发。