→→→→→→做出来叫爷爷了!←←←←←←
pascal吧
全部回复
仅看楼主
level 4
恶魔之痕 楼主
全排列问题(Form.PAS) 【问题描述】 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 【输入格式】 n(1≤n≤9) 【输出格式】 由1~n组成的所有不重复的数字序列,每行一个序列。 【输入样例】Form.in 3 【输出样例】Form.out 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 组合的输出(Compage.PAS) 【问题描述】 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n=5,r=3,所有组合为: l 2 3 l 2 4 1 2 5 l 3 4 l 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 【输入】 一行两个自然数n、r(1
2008年08月11日 11点08分 1
level 1
我只知道第一题,而且有两个.第一个是我教材上的例题(到现在我还看不明)program p12_7(input,output);const n=4;label 8;var p:array [1..n] of integer; e,d:array [2..n] of integer; j,t,k,l,m:integer;begin for j:=1 to n do begin p[j]:=j; d[j]:=j; e[j]:=-1 end; 8: m:=0; for j:=1 to n do write(p[j]:3); writeln; for k:=n downto 2 do begin d[k]:=d[k]+e[k]; l:=d[k]; if l=k then e[k]:=-1 else if l=0 then begin e[k]:=1; m:=m+1 end else begin l:=l+m; t:=p[l]; p[l]:=p[l+1]; p[l+1]:=t; goto 8 end; end;end.第二个是我自己做的.功能都是一样的.program p123(input,output);label 1,2;const x=5;var a,b,c:array [1..x] of integer; i,k,m,n:integer;begin for k:=1 to x do begin a[k]:=k; b[k]:=-1; c[k]:=k end; repeat i:=x; 1: if ((b[i]+c[i])<>(x+1))and((b[i]+c[i])<>0) then if a[c[i]]>a[c[i]+b[i]] then begin m:=a[c[i]]; n:=a[c[i]+b[i]]; k:=a[c[i]]; a[c[i]]:=a[c[i]+b[i]]; a[c[i]+b[i]]:=k; c[m]:=c[m]+b[i]; c[n]:=c[n]-b[i]; for k:=1 to x do write(a[k]:3); writeln; for k:=(i+1) to x do b[k]:=b[k]*(-1) end else begin 2: i:=i-1; if i=0 then break; goto 1; end else goto 2; until false;end.
2008年08月11日 12点08分 2
level 0
都差不多的。
2008年08月11日 13点08分 4
level 7
顶.这些都是深搜,回溯的入门题啊~
2008年08月12日 02点08分 5
level 4
xiao bai
2008年10月02日 06点10分 7
1