|
沙发
楼主 |
发表于 2019-3-31 19:41:59
|
只看该作者
1-9九个数字分成三个三位数,每个都是完全平方数
- #include<iostream>
- using namespace std;
- int a[10];
- int x1,x2,x3,xx1,xx2,xx3; ///枚举的数字和完全平方数
- bool b;
- int i,k,s=0;
- int main()
- {
- for (x1=10; x1*x1<=999; x1++)
- for (x2=x1+1; x2*x2<=999; x2++)
- for (x3=x2+1; x3*x3<=999; x3++) /// 三重枚举
- {
- xx1=x1*x1,xx2=x2*x2,xx3=x3*x3; ///生成完全平方数
- for (i=1;i<=9;i++) a[i]=1; ///初始都为1,注意这句话的位置
- k=xx1/100%10;a[k]--;
- k=xx1/10%10;a[k]--;
- k=xx1/1%10;a[k]--;
- k=xx2/100%10;a[k]--;
- k=xx2/10%10;a[k]--;
- k=xx2/1%10;a[k]--;
- k=xx3/100%10;a[k]--;
- k=xx3/10%10;a[k]--;
- k=xx3/1%10;a[k]--; ///对应-1
-
- b=1;for (i=1;i<=9;i++) if (a[i]!=0) b=0; ///判断1-9九个数字是否有人没有被用过
- if (b) cout<<xx1<<' '<<xx2<<' '<<xx3<<endl;
- }
- return 0;
- }
复制代码
其中有一段,每个数字对应的ai-1,我这里用了很直观的繁琐的方法。当然也可以把这三个数字拼成一个9位数,用循环去做。
- int x=xx1*1000000+xx2*1000+xx3;
- while (x>0)
- {
- k=x%10; a[k]--;
- x=x/10;
- }
复制代码 |
|