多题目

NOIP2012 完善程序 

2. (排列数)输入两个正整数n,m(1<n<20,1<m<n),在1~n中任取m个数,按字典序从小到大输出所有这样的排列。例如: 

输入:3 2 

输出:1 2

1 3 

2 1 

2 3

3 1 

3 2

#include <iostream>
#include <cstring>
using namespace std;
const int SIZE =25;
bool used[SIZE];
int data[SIZE];
int n,m,i,j,k;
bool flag;
int main()
{
	cin>>n>>m;
	memset(used,false,sizeof(used));
	for(i=1;i<=m;i++)
	{
		data[i]=i;
		used[i]=true;	
	}
	flag=true;
	while(flag)
	{
		for(i=1;i<=m-1;i++) cout<<data[i]<<" ";
		cout<<data[m]<<endl;
		flag=    ①     ;
		for(i=m;i>=1;i--)
		{
			     ②     ;
			for(j=data[i]+1;j<=n;j++)
				if(!used[j])
				{
					used[j]=true;
					data[i]=    ③   ;
					flag=true;
					break;	
				}
			if(flag)
			{
				for(k=i+1;k<=m;k++)
					for(j=1;j<=    ④   ;j++)
					if(!used[j])
					{
						data[k]=j;
						used[j]=true;
						break;
					}
				     ⑤   ;
			}
		}
	}
	return 0;	
}

第 1 题 填空

第 2 题 填空

第 3 题 填空

第 4 题 填空

第 5 题 填空

发表评论

登录 后再回复