c++编程:将1~9分成3个一组,组内数字不能重复,组间的数字也不会重复.每组中的三个数字可任意排列,

将1~9分成3个一组,共三组,组内数字不能重复,组间的数字也不会重复.每组中的三个数字可任意排列,组成一个三位数。已知这个三位数都是完全平方数,求这三个数。用c++编程。
求好心人帮助。
//还是我自己发一个程序吧!有改进的帮个忙,或者有更好的 也可以帮帮忙 发一下
#include"iostream"
#include"cstdlib"
using namespace std;
int main()
{
int a1,a2,a3,i,j,k,m,n,c1,c2,c3,t,t1,x,y;
for(a1=11;a1<=31;a1++)
for(a2=11;a2<=31;a2++)
for(a3=11;a3<=31;a3++)
{
i=a1*a1;
j=a2*a2;
k=a3*a3;//找出所有是完全平方数的三位数
char b[4],c[4],d[4];
itoa(i,b,10);
itoa(j,c,10);
itoa(k,d,10);//将符合条件的三位数拆分成个体
t=-1;
t1=-1;
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
if(b[m]==c[n]||b[m]==d[n]||c[m]==d[n])//筛选出三个三位数之间任何一个数不能相等的情况
{t=1;
break; }
}
}
for(x=0;x<2;x++)
{
for(y=x+1;y<=2;y++)
{
if(b[x]==b[y]||c[x]==c[y]||d[x]==d[y])//筛选出三位数内部不等的情况
{ t1=1;
break;} }}
if(t1==-1&&t==-1&&i<j&&j<k)//同时满足以上情况
cout<<i<<" "<<j<<" "<<k<<endl;//输出结果361 529 784}}

三个数(100-999) 是完全平方数,也就是10-31 这21个数的平方。其中10就不用了,也就20个。
算出这20个数,第一步,去掉数字重复的比如:11*11=121 12*12=144. 15*15=225等。
余下的从第一个开始,选取和第一个数无冲突的最近的一个数为第二个,然后找第三个,如果找不到第三个,把第2个换成下了个待选数,然后再找第三个。
寻找失败,把第一个数直接淘汰掉,选下一个数为第一个数,重复以上步骤。

用EXCLE 拉个表格,结果是:361 529 784追问

你能帮我用c++程序编下吗?我是初学者,不会这东西

追答

做为一个初学者,如果没有毅力啃骨头,我看不学也罢。方法给你了,如何去编程是自己的事了。

追问

关键这道题我已经搞了一天了,只用了一个最笨的方法做出来,我想知道灵活点得办法

追答

这种题,没有灵活的办法,就是穷举法。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-12-01
#include"iostream"
#include"cstdlib"
using namespace std;
int main()
{
int a1,a2,a3,i,j,k,m,n,c1,c2,c3,t,t1,x,y;
for(a1=11;a1<=31;a1++)
for(a2=11;a2<=31;a2++)
for(a3=11;a3<=31;a3++)
{
i=a1*a1;
j=a2*a2;
k=a3*a3;//找出所有是完全平方数的三位数
char b[4],c[4],d[4];
itoa(i,b,10);
itoa(j,c,10);
itoa(k,d,10);//将符合条件的三位数拆分成个体
t=-1;
t1=-1;
for(m=0;m<=2;m++)
{
for(n=0;n<=2;n++)
{
if(b[m]==c[n]||b[m]==d[n]||c[m]==d[n])//筛选出三个三位数之间任何一个数不能相等的情况
{t=1;
break; }
}
}
for(x=0;x<2;x++)
{
for(y=x+1;y<=2;y++)
{
if(b[x]==b[y]||c[x]==c[y]||d[x]==d[y])//筛选出三位数内部不等的情况
{ t1=1;
break;} }}
if(t1==-1&&t==-1&&i<j&&j<k)//同时满足以上情况
cout<<i<<" "<<j<<" "<<k<<endl;//输出结果361 529 784
}}本回答被提问者采纳
第2个回答  2012-04-12
#include <iostream>
using namespace std;
int main()
{ int num = 0;
cout << "输出一个三位数,各位不重复" << endl;
for(int i=1; i<=9; ++i)
for(int j=i+1; j<=9; ++j){
for(int k=j+1; k<=9; ++k){
if(i!=j||i!=k||j!=k)
cout << i*100+j*10+k << " ";
++num;}}
for(int i=9; i>=1; --i)
for(int j=i-1; j>=1; --j){
for(int k=j-1; k>=1; --k){
if(i!=j||i!=k||j!=k)
cout << i*100+j*10+k << " ";
++num;
}
}
cout << "共有这样的三位数" << num << "个";
cout << endl;
}

再建个全局数据 元素200个 把结果放进去 ,然后比较平方和 输出数组元素
时间仓促 剩下的您自己完成

169 256 289 324 361
529 576 625 729 784
841 961 1024 哈哈
第3个回答  2012-04-12
楼上正解
相似回答