网站大量收购独家精品文档,联系QQ:2885784924

算法习题及解答.doc

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法习题及解答

一个自然数可以写成若干个小于等于自己的自然之和,这叫该自然数的一个分解。不同的分解是表示这个自然数分解成的所有自然数不完全相同。例如:3=2+1和3=1+1+1表示不同的分解。而3=2+1和3=1+2为相同的分解。现在的任务是,给出一个自然数,要求所有不同的分解方案数。输入:输入文件的只有一个自然数N,N=10000。(input.txt)输出:输出文件只有一个数,为N的分解方案数。(output.txt) var n:integer; x: integer; a:array [0..10000] of integer; procedure writestr(); var i:integer; begin write(n,=,a[1]); for i:=2 to x do begin write(+,a[i]); end; writeln; end; function adda():integer; var s:integer; i:integer; begin s:=0; for i:=1 to x do s:=s+a[i]; adda:=s; end; function test(m:integer):boolean; var i:integer; begin if m0 then begin x: =x-2; exit(false); end; if m=0 then begin writestr(); x:=x-2; exit(false); end; for i:=a[x] to n-1 do begin x:=x+1; a[x]:=i; if (not test(n-adda())) then begin exit(true); end; end; test:=true; end; begin assign(input,input.txt); assign(output,output.txt); reset(input); rewrite(output); read(n); x:=0; a[0]:=1; test(n); close(input); close(output); end. 我们知道,所谓的卡列列克运算,是指任意一个四位数,只要它们各个位上的数不全相同,就有这样的规律:程序名为step.pas 把组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大的 四位数; 把组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则此数不足四位); 求出以上两数之差,得到一个新的四位数。 重复以上过程,总能得到最后结果是6174。 试编写一个程序,实现卡布列克运算,要求以下面的格式输出全部运算过程和结果,统计需要运算的步数(如下例为3步)。 输出格式: n=5346 6543-3456=3087 8730-378=8352 8532-2358=6174 SETP=3 var n:intege r; x,max,min:integer; procedure getmaxmin(m:integer); var a:array [1..4] of integer; i,j,tmp:integer; begin i:=1; while m0 do begin a[i]:=m mod 10; m:=m div 10;

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档