欢迎来到天天文库
浏览记录
ID:16707063
大小:344.50 KB
页数:46页
时间:2018-08-24
《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、(c?"+%d":"%d",a*a-a+1+c*2);}if(d==b)printf("Y");/*若条件满足则输出“Y”*/elseprintf("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+4、199+201+203+205+207+209Y*思考题本题的求解方法是先证实,在证实的过程中找到编程的算法,然后实现编程。实际上我们也可以不进行证实,直接使用编程中常用的试探方法来找出该数列,验证该定理。请读者自行设计算法。当然这样得到的数列可能与用定理方法得到的数列不一样。loanapprovalandpostcreditapprovalofficer/atalllevelsinaccordancewithcreditapprovalrules,licensingandeventualexerciseofc5、reditdecisionpowerofpersonsorinstitutions.Reviewfindingsandreviewcomments,accordingtotheBank'scredit2.回文数的形成任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。请编程验证。*问题分析与算法设计回文数的这一形成规则目前还属于一个猜想,尚未得到数学上的证实。有些回文数要经历上百个步聚才能获得。这里通过编程验证。题目中给出的处理过程很清楚,算法不需要非凡设计6、。可按照题目的叙述直接进行验证。*程序与程序注释#include#defineMAX2147483647longre(longint);intnonres(longints);voidmain(){longintn,m;intcount=0;printf("Pleaseenetranumberoptionaly:");scanf("%ld",&n);printf("Thegenerationprocessofpalindrome:");while(!nonres((m=re(n))+n))7、/*判定整数与其反序数相加后是否为回文数*/{if(m+n>=MAX){printf("inputerror,break.");break;}else{printf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);n+=m;}}printf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);/*输出最后得到的回文数*/printf("Herewereachedtheaimatlast!");}longre(longinta)/*求输入整数的反序数*/8、{longintt;for(t=0;a>0;a/=10)/*将整数反序*/t=t*10+a%10;returnt;}intnonres(longints)/*判定给定的整数是否是回文数*/{loanapprovalandpostcreditapprovalofficer/atalllevelsinaccordancewithcreditapprovalrules,licensingan
3、(c?"+%d":"%d",a*a-a+1+c*2);}if(d==b)printf("Y");/*若条件满足则输出“Y”*/elseprintf("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+
4、199+201+203+205+207+209Y*思考题本题的求解方法是先证实,在证实的过程中找到编程的算法,然后实现编程。实际上我们也可以不进行证实,直接使用编程中常用的试探方法来找出该数列,验证该定理。请读者自行设计算法。当然这样得到的数列可能与用定理方法得到的数列不一样。loanapprovalandpostcreditapprovalofficer/atalllevelsinaccordancewithcreditapprovalrules,licensingandeventualexerciseofc
5、reditdecisionpowerofpersonsorinstitutions.Reviewfindingsandreviewcomments,accordingtotheBank'scredit2.回文数的形成任取一个十进制整数,将其倒过来后与原来的整数相加,得到一个新的整数后重复以上步聚,则最终可得到一个回文数。请编程验证。*问题分析与算法设计回文数的这一形成规则目前还属于一个猜想,尚未得到数学上的证实。有些回文数要经历上百个步聚才能获得。这里通过编程验证。题目中给出的处理过程很清楚,算法不需要非凡设计
6、。可按照题目的叙述直接进行验证。*程序与程序注释#include#defineMAX2147483647longre(longint);intnonres(longints);voidmain(){longintn,m;intcount=0;printf("Pleaseenetranumberoptionaly:");scanf("%ld",&n);printf("Thegenerationprocessofpalindrome:");while(!nonres((m=re(n))+n))
7、/*判定整数与其反序数相加后是否为回文数*/{if(m+n>=MAX){printf("inputerror,break.");break;}else{printf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);n+=m;}}printf("[%d]:%ld+%ld=%ld",++count,n,m,m+n);/*输出最后得到的回文数*/printf("Herewereachedtheaimatlast!");}longre(longinta)/*求输入整数的反序数*/
8、{longintt;for(t=0;a>0;a/=10)/*将整数反序*/t=t*10+a%10;returnt;}intnonres(longints)/*判定给定的整数是否是回文数*/{loanapprovalandpostcreditapprovalofficer/atalllevelsinaccordancewithcreditapprovalrules,licensingan
此文档下载收益归作者所有