B - 组合数

v

题目描述

找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。

输入

输入n、r。

输出

按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。

样例输入

5 3

样例输出

543
542
541
532
531
521
432
431
421
321

题目描述

找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。

输入

输入n、r。

输出

按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。

样例输入

5 3

样例输出

543
542
541
532
531
521
432
431
421
321
#include<stdio.h>
int n,r;int a[1000],b[1000],u=0;
void dfs(int t)
{
	if(t==r+1)
	{
		for(int i=2;i<=r;i++)
		{
			if(a[i-1]<a[i])
			{
				u=1;break;
			}
		}
		if(u!=1)
		{
			for(int i=1;i<=r;i++)
		{
			printf("%d",a[i]);
		}
			
		printf("\n");
		}
		u=0;
		return;
	 } 
	 for(int i=n;i>0;i--)
	 {
	 	if(b[i]==0)
	 	{
	 		b[i]=1;
	 		a[t]=i;
	 		dfs(t+1);
	 		b[i]=0;
		 }
	 }
} 
 
int main()
{
	scanf("%d%d",&n,&r);
	dfs(1);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43568078/article/details/84876766