
请各位高手帮帮忙~~ 5
第一题(15分),降序组合。给定两个自然数N,R(N>R),输出从数1到N中按降序顺序取R个自然数的所有组合。例如,N=5,R=3时,输出的结果是:54354254153...
第一题(15分),降序组合。给定两个自然数N,R(N>R),输出从数1到N中按降序顺序取R个自然数的所有组合。例如,N=5,R=3时,输出的结果是:
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
程序中用a1,a2,……ar表示一个降序排列的R个数的组合,要求a1>=R.为了能够穷举出全部降序排列的R个数的组合,按递减顺序调整前一个组合的部分元素生成下一个组合,调整时,当a1=1就要回朔。上例由回朔生成下一个组合的情况,有541→532,531→521,521→432(二次回朔),431→421,421→321(二次回朔)。上述过程,当a1= R-1时结束。
[程序]
program go8_5;
var n,r,i,j:integer;
a:array[1···20] of integer;
begin
write(‘n,r=’);
repeat
readln(n,r);
until n>r;
I:=1;a[1]:=n;writeln(‘result:’);
Repeat
If i<>r
Then if___①_______
Then begin
a[I+1]:=___②_________;I:=I+1;
end
else begin
_____③______;______④________;
end
else begin
for j:=1 to r do write(a[j]:3);
writeln;
if a[r]=1 then begin
I:=I—1;a[I]—1;
End
Else______⑤__________;
End 展开
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
程序中用a1,a2,……ar表示一个降序排列的R个数的组合,要求a1>=R.为了能够穷举出全部降序排列的R个数的组合,按递减顺序调整前一个组合的部分元素生成下一个组合,调整时,当a1=1就要回朔。上例由回朔生成下一个组合的情况,有541→532,531→521,521→432(二次回朔),431→421,421→321(二次回朔)。上述过程,当a1= R-1时结束。
[程序]
program go8_5;
var n,r,i,j:integer;
a:array[1···20] of integer;
begin
write(‘n,r=’);
repeat
readln(n,r);
until n>r;
I:=1;a[1]:=n;writeln(‘result:’);
Repeat
If i<>r
Then if___①_______
Then begin
a[I+1]:=___②_________;I:=I+1;
end
else begin
_____③______;______④________;
end
else begin
for j:=1 to r do write(a[j]:3);
writeln;
if a[r]=1 then begin
I:=I—1;a[I]—1;
End
Else______⑤__________;
End 展开
1个回答
2012-08-07
展开全部
看不懂。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询