pascal问题:组合序列

内容:

组合序列,组合一般是指从n(<=10)个不同元素中取r(<=n)个元素的不同组合的数目。按字典序
输入说明:

一行2个整数,如 3 2

输出说明:

每行一个组合序列,中间用空格隔开
输入样例:

若题目没有特别说明,则应该以多组测试数据方式读取,或者参考a001。3 2
输出样例 :

1 2
1 3
2 3

请各位大大帮一下忙啦,我一看见这题目头就痛,请快快解答,越快越好!!!谢谢...
那个...您能给我源程序吗?我想要这个,听分析我还是有点像一头雾水。。。

首先对于样例,组合1 3,和组合3 1实质上是一样的,都是由1和3两个数构成,又因为一个数字只能用一次,所以我们可以人为规定选出的前一个数小于后一个数来避免重复。这样子你用一个dfs搜索即可。
dfs(i,j)表示当前要找第i个元素。其中已找到的第i-1个元素为j。那么有两种情况:
1:i=r+1:说明已经找到一种情况,输出。
2:i<>r+1:说明还没有完成组合,继续找。for k:=j+1 to n do dfs(i+1,k);
这样子就可以了。
可以证明这样子找到的一定字典序最小。 ……那我可敲源码啦,你到时候就看在我辛苦的份上选我的答案好了……程序保证给你对的。
Program Test;
var a:array[1..10]of longint;
n,r:longint;
procedure dfs(i,j:longint);
var k:longint;
begin
if i=r+1 then
begin
for k:=1 to r-1 do write(a[k],' ');
writeln(a[r]);
exit;
end;
for k:=j+1 to n do
begin
a[i]:=k;
dfs(i+1,k);
end;
end;
begin
readln(n,r);
dfs(1,0);
end.
程序各变量名含义见分析。
温馨提示:内容为网友见解,仅供参考
无其他回答

pascal排列组合教程
问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)(35)8.用20个不同颜色的念珠穿成一条项链,能做多少个不同的项链.(20!\/20)9.在单词MISSISSIPPI 中字母的排列数是(11!\/(1!*4!*4!*2!)10.求取自1,2,...k的长为r的非减序列的个数为(c(r+k-1,r)) 3.3排列与组合的产生算法1.排列...

Pascal编程题(合唱队形)
呵呵。我们先瞥开dp不看。解决这个问题我们这么考虑:肯定有一个中间人,然后在他左边的人都要比他矮,并且是单调上升;在他右边的人肯定要比他矮,并且是单调下降!那么我们有了这个中间人,并且知道他的身高和他的位置,然后就是做左边的最长单调上升序列,加上右边的最长单调下降序列!这个中间人,...

请详细讲一下PASCAL合唱队形这个DP程序,万分感谢。
最终s[n]即为以t[i]开头到t[n]的最长下降子序列的长度。比如说数据是t=(186,186,150,200,160,130,197,220),求以t[4]开头的最长下降子序列的长度:s[4]=1 200>160,s[5]=max(s[4],s[4]+1)=2 200>130,160>130,s[6]=max(s[5],s[4]+1,s[5]+1)=3 200>197,s[7]=...

【Pascal问题】 队列快照是指在某一时刻队列中的元素组成的有序序列.现...
首先一位数一共有6个 然后两位数 1 1 到 1 6 共6个 2 1到 2 5 共5个 3 1到 3 4 共4个 4 1 到4 3共3个 5 1到 5 2 共2个 6 1到 6 1 共1个 总共1+。。+6=21个 最后三位数 111 到 116 6个 121 到 125 5个 。。。161 1个 共21个 211 到 215 5个 。。。251...

pascal 合唱队形
我们枚举一个中间人,ans=左边最长单调上升序列+右边最长单调下降序列+1(1就是中间这个人)一个中间人对应一个ans,枚举中间人,求出最大的ans === 我觉得说得很清楚了丫,up[i]表示到第i个人的最长上升子序列。如果a[i]>a[j](i>j),那么up[i]的值就可以取up[j]+1(就是到第i个人...

【Pascal问题】 队列快照是指在某一时刻队列中的元素组成的有序序列.现...
首先一位数一共有6个 然后两位数 1 1 到 1 6 共6个 2 1到 2 5 共5个 3 1到 3 4 共4个 4 1 到4 3共3个 5 1到 5 2 共2个 6 1到 6 1 共1个 总共1+。。+6=21个 最后三位数 111 到 116 6个 121 到 125 5个 。。。161 1个 共21个 211 到 215 5个 。。。251...

魔术师翻牌 pascal问题(追加50)
最后把A放在牌组的最上面。所得的序列就是魔术师最开始的序列。很容易看出这个队列其实就是把魔术师表演时的队列首尾互换得到的队列。然后把这个方法简化一下。从MAX开始往1数和从1开始往MAX数其实是一样的,并且如果你手里有N 张牌的话,数MAX张牌和数MAX mod N张牌是一样的。所以算法就是,把...

一道pascal题:输入10个正整数,将这10个数字按从大到小的顺序排列_百度...
第i遍处理仅将L[i]插入L[1..i-1]的适当位置p,原来p后的元素一一向右移动一个位置,使得L[1..i]又是排好序的序列。例2:输入序列数据按非减顺序输出.程序1:program crpx;const n=7;var a:array[1..n] of integer; i,j,k,t:integer;begin write('Enter date:'); for i:= 1 to n do ...

pascal高手快来!!!急!!!
Pascal模拟题 问题名称 文件名 输入 输出 时限 分值 序列 sequence.exe sequence.in sequence.out 2s 100 连分数 faction.exe faction.in faction.out 1s 100 词链 link.exe link.in link.out 1s 100 Geodetic集合 geo.exe geo.in geo.out 1s 100 序列(sequence.exe)问题描述 有一个非递减的...

noip2006 pascal普及组第四题数列,我获取到一个人编写的程序,且经测...
(该序列实际上就是:30,31,30+31,32,30+32,31+32,30+31+32,…)这道题关键要找规律 1,30是3的0次方,31是3的2次方,如此类推 2,找出n和3的幂之间的规律 n=1时(换成2进制数为1),他的值为等于3的0次方 n=2时(换成2进制数为10),他的值等于3的1次方,相当于2进制...

相似回答
大家正在搜