帮忙修改 不知哪里有错 运行不出来 c语言
将1至9这九个数分成三组,使每组中的三个数排成一个三位数的完全平方数,要求每个数必须用一次,而且仅用一次.
#include<stdio.h>
main()
{
int a[20],b[10];
int i,j,k,m,n,t,h;
for(j=0,i=11;i<=31;++i)
if(i%10!=0)
a[++j]=i*i;
printf("\n");
for(k=1;k<=j-2;++k)
for(m=k+1;k<=j-1;++m)
for(n=m+1;n<=j;++n){
b[1]=a[k]/100;
b[2]=(a[k]-b[1]*100)/10;
b[3]=a[k]%10;
b[4]=a[m]/100;
b[5]=(a[m]-b[4]*100)/10;
b[6]=a[m]%10;
b[7]=a[n]/100;
b[8]=(a[n]-b[7]*100)/10;
b[9]=a[n]%10;
for(t=1;t<=8;++t)
for(h=t+1;h<=9;++h)
if(b[t]==b[h])
goto abc;
printf("result:%5d%5d%5d\n",a[k],a[m],a[n]);
goto end;
abc:;
}
end:;
return(0);
}
[解决办法]
#include <iostream>using namespace std;int sum(int m, int n, int l){ int result = 0; int mk[10] = {0}; int k; for (k=3;k;k--) { if (mk[n%10]) return -1; else mk[n%10]=1, result += n%10, n /= 10; } for (k=3;k;k--) { if (mk[m%10]) return -1; else mk[m%10]=1, result += m%10, m /= 10; } for (k=3;k;k--) { if (mk[l%10]) return -1; else mk[l%10]=1, result += l%10, l /= 10; } return result;}int main(){ int mt[40] = {0}; int n; for (n = 0; n * n < 1000; n++) mt[n] = n * n; for (int i = 10; i < n; ++i) for (int j = i+1; j < n; ++j) for (int k = j+1; k < n; ++k) { if (sum(mt[i], mt[j], mt[k])==45) cout << mt[i] << '\t' << mt[j] << '\t' << mt[k] << '\t' << endl; } return 0;}