会c语言的来,麻烦各位大侠了。我怎么做都不对~~

1—9组成三个3位的平方数将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不许有重复数字,也不许同其它组的三个数字重复,要求每组中的... 1—9组成三个3位的平方数

将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数。

问题分析与算法设计

首先求出三位数中不包含0且是某个整数平方的三位数,这样的三位数是不多的。然后将

满足条件的三位数进行组合,使得所选出的3个三位数的9个数字没有重复。程序中可以将寻找满足条件三位数的过程和对该三位数进行数字分解的过程结合起来。
展开
 我来答
chz115
2011-05-05 · TA获得超过234个赞
知道答主
回答量:55
采纳率:0%
帮助的人:0
展开全部
(1)用于产生三位数中不包含0且是某个整数平方的三位数,且满足三位数的各个数字不重复。
(片断)……
int i,j,m,a[30],x,y,z;
j=0;
for(i=10,i<32,i++)
{m=i*i; x=m%10; y=m%100; z=m%1000;
if(x!=y)&&(x!=z)&&(y!=z)&&(x*y*z!=0) /*三位数的各个数字不为0,且不重复。
{a[j]=m; j++} /*将这些数存在数组a[]中
}
m=j; /*记录这些数的个数,ii)会用到。

(2)将满足条件的三位数进行组合,使得所选出的3个三位数之间9个数字没有重复。
i).先定义一个函数,用于对比两个三位数字,重复-返回0;不重复-返回1.
int comp(int a,int b)
{int t,flag=1;
t=a;
while(t)
{t=t%10;
if(t==b%10)‖(t==b%100)‖(t==b%1000)
{flag=0; return 0; break;}
}
if (flag) return 1;
}

ii).求结果(片断)
……
int i,j,k,num;
num=0;
for(i=0;i<m-2;i++) /*这里的m指的是满足(1)条件的三位的个数
for(j=i+1;j<m-1;j++)
for(k=j+1;k<m;j++)
if(comp(a[i],a[j])&&comp(a[i],a[k])&&comp(a[j],a[k])) /*调用
{num++;
printf("第%d种:%d,%d,%d/n",num,a[i],a[j],a[k]);}
printf("共有%d种/n",num);

*以上是个人的一些想法,希望对你有帮助。
lylxy1965
2011-05-04 · TA获得超过2413个赞
知道小有建树答主
回答量:436
采纳率:100%
帮助的人:223万
展开全部
算法没问题。这样的数应该有13个。最后一步比较麻烦,我也没什么更优的算法,好像只能多设几个变量,三个循环嵌套起来比较查询了。需要点耐心,有时候只能用笨办法。不过我还有一种思路:用排列组合的概念,将9个数排列检查,这样可以保证产生的3个数没有重复数字,思路上很清晰,也很简单,不过好像程序实现上更复杂了。提出做参考。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式