标签:
【问题描述】
排列与组合是常用的数学方法,其中组合就是从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<n<21,1<=r<=n)。
【输出】
所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
【样例】
输入
5 3
输出
1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
var n,m:longint; a:array[1..100]of longint; p:array[1..100] of boolean; procedure print; var i,j,t:longint; begin for i:=1 to m do write(a[i],‘ ‘ ); writeln; end; procedure try(k,s:longint); var i:longint; begin if k=m+1 then print else for i:=s+1 to n-m+k do {不明所以} if p[i] then begin a[k]:=i; p[i]:=false; try(k+1,i); p[i]:=true; end; end; begin readln(n,m); fillchar(p,sizeof(p),true); fillchar(a,sizeof(a),0); try(1,0); {搜索的是第几个数据;搜索了几个数据} end.
标签:
原文地址:http://www.cnblogs.com/yangqingli/p/4709284.html