c++语言程序百例精解07

c++语言程序百例精解07

ID:14417101

大小:60.50 KB

页数:27页

时间:2018-07-28

c++语言程序百例精解07_第1页
c++语言程序百例精解07_第2页
c++语言程序百例精解07_第3页
c++语言程序百例精解07_第4页
c++语言程序百例精解07_第5页
资源描述:

《c++语言程序百例精解07》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C++语言程序百例精解07C/C++语言经典、实用、趣味程序设计编程百例精解(7)61.1~9组成三个3位的平方数将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不允许有重复数字,也不许同其它组的三个数字重复,要求每组中的三位数都组成一个平方数。*问题分析与算法设计本问题的思路很多,这里介绍一种简单快速的算法。首先求出三位数中不包含0且是某个整数平方的三位数,这样的三位数是不多的。然后将满足条件的三位数进行组合,使得所选出的3个三位数的9个数字没有重复。程序中可以将寻找足条件的三位数的过程和对该三位数进行数字分解的过程结合起

2、来。*程序说明与注释#includeintmain(){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+

3、1][0]=k/100;/*百位*/num[j+1][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][

8、2];for(t=i+1;t<=j-1;++t){b[4]=num[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];

9、b[9]=num[k][2];for(flag=0,m=1;!flag&&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

10、位数,另一组形成一个4位数,使得前者为后者的n倍。求所有满足条件的5位数和4位数。(注意:N的最大值等于68,68以内的某些N也是不可能的。不可能的N值包括:1、10、11、20、21、25、30、31等共32个。)62.由8个整数形成奇特的立方体任意给出8个整数,将这8个整数分别放在一个立方体的八个顶点上,要求每个面上的*问题分析与算法设计简化问题:将8个顶点对应数组中的8个元素,将“每个面上的四个数之和皆相等”转换为数组无素之间和的相等关系。这里的关键在于正确地将立方体的8个顶点与数组的8个元素对应。可以利用简单的穷举方法建立8个数的全部排列。*程序说明与注

11、释#include#includeintmain(){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'tb

12、econstructed

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。