欢迎来到天天文库
浏览记录
ID:33891850
大小:440.00 KB
页数:46页
时间:2019-03-01
《2013年全国软件大赛赛前辅导题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、231.尼科彻斯定理验证尼科彻斯定理,即:任何一个整数的立方都可以写成一串连续奇数的和。××*问题分析与算法设计本题是一个定理,我们先来证实它是成立的。对于任一正整数a,不论a是奇数还是偶数,整数(a×a-a+1)必然为奇数。构造一个等差数列,数列的首项为(a×a-a+1),等差数列的差值为2(奇数数列),则前a项的和为:a×((a×a-a+1))+2×a(a-1)/2=a×a×a-a×a+a+a×a-a=a×a×a定理成立。证毕。通过定理的证实过程可知L所要求的奇数数列的首项为(a×a-a+1),长度为a。编程的算法不需要非凡设计,可按照定理的证实过直接进行验证。*程序与程序
2、注释#includevoidmain(){inta,b,c,d;printf("Pleaseenteranumber:");scanf("%d",&a);/*输入整数*/b=a*a*a;/*求整数的三次方*/printf("%d*%d*%d=%d=",a,a,a,b);for(d=0,c=0;c3、eprintf("N");/*否则输出“N”*/}*运行结果1)Pleaseenteranumber:1313*13*13=2197=157+159+161+163+165+167+169+171+173+175+177+179+181Y2)Pleaseenteranumber:1414*14*14=2744=183+185+187+189+191+193+195+197+199+201+203+205+207+209Y*思考题本题的求解方法是先证实,在证实的过程中找到编程的算法,然后实现编程。实际上我们也可以不进行证实,直接使用编程中常用的试探方法来找出该数列,验证该定理4、。请读者自行设计算法。当然这样得到的数列可能与用定理方法得到的数列不一样。2.回文数的形成任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。请编程验证。*问题分析与算法设计回文数的这一形成规则目前还属于一个猜想,尚未得到数学上的证实。有些回文数要经历上百个步聚才能获得。这里通过编程验证。题目中给出的处理过程很清楚,算法不需要非凡设计。可按照题目的叙述直接进行验证。*程序与程序注释#include#defineMAX2147483647longre(longint);intnonres(longints);5、voidmain(){longintn,m;intcount=0;printf("Pleaseenetranumberoptionaly:");scanf("%ld",&n);printf("Thegenerationprocessofpalindrome:");while(!nonres((m=re(n))+n))/*判定整数与其反序数相加后是否为回文数*/{if(m+n>=MAX){printf("inputerror,break.");break;}else{printf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);n+=m;}}p6、rintf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);/*输出最后得到的回文数*/printf("Herewereachedtheaimatlast!");}longre(longinta)/*求输入整数的反序数*/{longintt;for(t=0;a>0;a/=10)/*将整数反序*/t=t*10+a%10;returnt;}intnonres(longints)/*判定给定的整数是否是回文数*/{if(re(s)==s)return1;/*若是回文数则返回1*/elsereturn0;/*否则返回 0*/}*运行结果3.自动发牌一副扑7、克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。*问题分析与算法设计按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应
3、eprintf("N");/*否则输出“N”*/}*运行结果1)Pleaseenteranumber:1313*13*13=2197=157+159+161+163+165+167+169+171+173+175+177+179+181Y2)Pleaseenteranumber:1414*14*14=2744=183+185+187+189+191+193+195+197+199+201+203+205+207+209Y*思考题本题的求解方法是先证实,在证实的过程中找到编程的算法,然后实现编程。实际上我们也可以不进行证实,直接使用编程中常用的试探方法来找出该数列,验证该定理
4、。请读者自行设计算法。当然这样得到的数列可能与用定理方法得到的数列不一样。2.回文数的形成任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。请编程验证。*问题分析与算法设计回文数的这一形成规则目前还属于一个猜想,尚未得到数学上的证实。有些回文数要经历上百个步聚才能获得。这里通过编程验证。题目中给出的处理过程很清楚,算法不需要非凡设计。可按照题目的叙述直接进行验证。*程序与程序注释#include#defineMAX2147483647longre(longint);intnonres(longints);
5、voidmain(){longintn,m;intcount=0;printf("Pleaseenetranumberoptionaly:");scanf("%ld",&n);printf("Thegenerationprocessofpalindrome:");while(!nonres((m=re(n))+n))/*判定整数与其反序数相加后是否为回文数*/{if(m+n>=MAX){printf("inputerror,break.");break;}else{printf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);n+=m;}}p
6、rintf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);/*输出最后得到的回文数*/printf("Herewereachedtheaimatlast!");}longre(longinta)/*求输入整数的反序数*/{longintt;for(t=0;a>0;a/=10)/*将整数反序*/t=t*10+a%10;returnt;}intnonres(longints)/*判定给定的整数是否是回文数*/{if(re(s)==s)return1;/*若是回文数则返回1*/elsereturn0;/*否则返回 0*/}*运行结果3.自动发牌一副扑
7、克有52张牌,打桥牌时应将牌分给四个人。请设计一个程序完成自动发牌的工作。要求:黑桃用S(Spaces)表示;红桃用H(Hearts)表示;方块用D(Diamonds)表示;梅花用C(Clubs)表示。*问题分析与算法设计按照打桥牌的规定,每人应当有13张牌。在人工发牌时,先进行洗牌,然后将洗好的牌按一定的顺序发给每一个人。为了便于计算机模拟,可将人工方式的发牌过程加以修改:先确定好发牌顺序:1、2、3、4;将52张牌顺序编号:黑桃2对应数字0,红桃2对应数字1,方块2对应数字2,梅花2对应
此文档下载收益归作者所有