2、o.h>intmain(){inta[20],num[20][3],b[10];/*a:存放满足条件的三位数*//*若不是10的倍数,则分解三位数*//*分解该三位数中的每一个数字*/inti,j,k,m,n,t,flag;printf("The3squareswith3differentdigitseachare:");for(j=0,i=11;i<=31;i++)/*求出是平方数的三位数*/if(i%10!=0)/*若不是10的倍数,则分解三位数*/{k=i*i;/*分解该三位数中的每一个数字*/num[j+1][0]=k/100;/*百位*/num[j+1][
3、1]=k/10%10;/*十位*/num[j+1][2]=k%10;/*个位*/if(!(num[j+1][0]==num[j+1][1]
4、
5、num[j+1][0]==num[j+1][2]
6、
7、num[j+1][1]==num[j+1][2]))/*若分解的三位数字均不相等*/a[++j]=k;/*j:计数器,统计已找到的满足要求的三位数*/}for(i=1;i<=j-2;++i)/*从满足条件的三位数中选出三个进行组合*/{b[1]=num[i][0];b[2]=num[i][1];b[3]=num[i][2];for(t=i+1;t<=j-1;++t){b[4]=n
8、um[t][0];/*取第t个数的三位数字*/b[5]=num[t][1];b[6]=num[t][2];for(flag=0,m=1;!flag&&m<=3;m++)/*flag:出现数字重复的标记*/for(n=4;!flag&&n<=6;n++)/*判断两个数的数字是否有重复*/if(b[m]==b[n])flag=1;/*flag=1:数字有重复*/if(!flag)for(k=t+1;k<=j;k++){b[7]=num[k][0];/*取第k个数的三位数字*/b[8]=num[k][1];b[9]=num[k][2];for(flag=0,m=1;!flag
9、&&m<=6;m++)/*判断前两个数字是否*/for(n=7;!flag&&n<=9;n++)/*与第三个数的数字重复*/if(b[m]==b[n])flag=1;if(!flag)/*若均不重复则打印结果*/printf("%d,%d,%d",a[i],a[t],a[k]);}}}}*运行结果The3squareswith3differentdigitseachare:361,529,784*思考题将1、2、3、4、5、6、7、8、9九个数字分成二组,每个数字只能用一次,一组形成一个5位数,另一组形成一个4位数,使得前者为后者的n倍。求所有满足条件的5位数和4位
10、数。(注意:N的最大值等于68,68以内的某些N也是不可能的。不可能的N值包括:1、10、11、20、21、25、30、31等共32个。)62.由8个整数形成奇特的立方体任意给出8个整数,将这8个整数分别放在一个立方体的八个顶点上,要求每个面上的四个数之和相等。*问题分析与算法设计简化问题:将8个顶点对应数组中的8个元素,将“每个面上的四个数之和皆相等”转换为数组无素之间和的相等关系。这里的关键在于正确地将立方体的8个顶点与数组的8个元素对应。可以利用简单的穷举方法建立8个数的全部排列。*程序说明与注释#include#include11、>intmain(){inta[9],ii=0,i,a1,a2,a3,a4,b1,b2,b3,b4,flag;for(i=1;i<=8;i++)/*输入个数*/{printf("Pleaseenter[%d]number:",i);scanf("%d",&a[i]);ii+=a[i];}printf("******************************************");if(ii%2)/*和为奇数则输入的8个数不可用*/{printf("Sorrytheycan'tbeconstructedrequiredcub