#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int a,b,c;
for(a=1; a<=3; a++)
{
for(b=1; b<=9; b++)
{
if(b!=a)
{
for(c=1; c<=9; c++)
{
if(c!=a&&c!=b)
{
int sum1=a*100+b*10+c;
int sum2=2*sum1;
int sum3=3*sum1;
if(sum2<=698&&sum3<=987)
{
int d,e,f,g,h,i;
d=sum2/100;
e=(sum2/10)%10;
f=sum2%10;
if(d!=e&&e!=f&&f!=d&&e!=0&&f!=0)
{
if(d!=a&&d!=b&&d!=c&&e!=a&&e!=b&&e!=c&&f!=a&&f!=b&&f!=c)
{
g=sum3/100;
h=(sum3/10)%10;
i=sum3%10;
if(g!=h&&g!=i&&i!=h&&h!=0&&i!=0&&g!=d&&g!=e&&d!=f&&h!=d&&h!=e&&h!=f&&i!=d&&i!=e&&i!=f)
{if(g!=a&&g!=b&&g!=c&&h!=a&&h!=b&&h!=c&&i!=a&&i!=b&&i!=c)
printf("%d %d %d\n",sum1,sum2,sum3);
}
}
}
}
}
}
}
}
}
return 0;
}
输出为:
192 384 576
219 438 657
273 546 819
327 654 981
Process returned 0 (0x0) execution time : 0.293 s
Press any key to continue.
肯定还有更好的办法
更新:
#include <iostream>
using namespace std;
void result(int num, int &result_add, int &result_mul)
{
int i, j, k;
i = num / 100; //百位
j = num / 10 % 10; //十位
k = num % 10; //个位
result_add += i + j + k; //分解出来的位数相加
result_mul *= i * j * k; //相乘
}
int main()
{
int i, j, k;
int result_add, result_mul;
for(i = 123; i <=329; i++)
{
j = i * 2;
k = i * 3;
result_add = 0;
result_mul = 1;
result(i, result_add, result_mul);
result(j, result_add, result_mul);
result(k, result_add, result_mul);
if(result_add == 45 && result_mul == 362880)
cout<<i<<' '<<j<<' '<<k<<' '<<endl;
}
return 0;
}
换用c++, 用引用来改变实参
注意1到9相加一定为45 1到9相乘也一定为定值
最大数为987 除以3后 为329 所以sum1有限制
可以从直接从三位数开始找 只要满足和和积符合 这样就不用判断重复问题
就说明没有重复
比较方便!!!不用自己加