公平选择组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了公平选择组合相关的知识,希望对你有一定的参考价值。

计算机学院有n(0<n<10)个学霸,现选优秀毕业生m(0<m<=n)个,由于无法选出最优秀的学生,现只能随机抽取,现在,将这n个学霸按1,2,3...n编号,请给出将获得优秀毕业生的所有组合

输入:

输入n m

输出:

输出所有优秀毕业生可能的组合,且每个组合的数值需从大到小降序排列,组合与组合之间需按逆字典序排列

#include <iostream>
using namespace std;

int main()
{
	int n, m;
	cin >> n >> m;
	int i = n;
	int* arr = new int[m];
	int index = m - 1;
	int tmp = i;
	for (int k = 0; k < m; ++k){
		arr[k] = tmp--;
	}
	for (int j = index; j >= 0; ){
		int min = m - j; 
		for (int h = j+1; h < m; ++h){
			arr[h] = arr[h - 1]-1;
		}
		while (arr[j] >= min && arr[m-1] >= 1){
			for (int t = 0; t < m; ++t){
				cout << arr[t] << " ";
			}
			cout << endl;
			--arr[m-1];
		}
		if (arr[j] < min){
			--j;
			--arr[j];
		}
		else{
			if (arr[j] == min)
				--j;
			for (int g = m - 1; g >= 0; --g){
				if (arr[g]>m - g){
					--arr[g];
					j = g;
					break;
				}
			}
		}
	}
	delete[] arr;
	system("pause");
	return 0;
}



《完》

本文出自 “零蛋蛋” 博客,谢绝转载!

以上是关于公平选择组合的主要内容,如果未能解决你的问题,请参考以下文章

哈斯克尔。我很困惑这个代码片段是如何工作的

Relay.js 没有正确解析组合片段

简单博弈论

JavaScript 代码片段

如何组合绑定片段而不将它们包装在 XML 文字中

48个值得掌握的JavaScript代码片段(上)