0
点赞
收藏
分享

微信扫一扫

蓝桥杯 算法训练 数字游戏

凉夜lrs 2022-02-07 阅读 88
/*
	1.输出字典序最小 : 
	使用 do{}while(next_permutation(array, array+length)); 大框架 
	
	2.next_permutation(array, array+length) 
	函数基本内容:先进行字典序较小的排列,此时数组排列已经改变,
	当前序列不存在下一个排列时,函数返回false,否则返回true 
	附:permutation 的意思是  排列 。 
	
	3.递加逻辑 
	
					2022/2/7  fevergo 明鹊 。。。
					希望对你有帮助 
*/
#include<iostream>
#include<algorithm>
using namespace std;
int a[20] = {0}, b[20] = {0};
int main()
{
	int n, sum;
	cin>>n>>sum;
	
	for(int i = 0;i<n;i++) // 赋值数组 
		a[i] = i+1;
		
	int flag = 0; // 判断并终止循环  
	do
	{
		for(int i = 0;i<n;i++)
			b[i] = a[i]; // 赋值b[n]数组 ,便于操作和输出a[n]数组 
		
		for(int j = n-1;j>0;j--) // 累次递加 ,最终的和保存在b[0]中 
			for(int i = 0;i<n-1;i++)
				b[i] += b[i+1]; 
								
		if(b[0] == sum) 
		{
			flag = 1;
			break;
		}
	
	}while(next_permutation(a, a+n));
	
	if(flag) // 判断并输出  
	for(int i = 0;i<n;i++)
		cout<<a[i]<<" ";
	
	return 0;
}
举报

相关推荐

0 条评论