首页 > 代码库 > 公平选择组合
公平选择组合
计算机学院有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; }
《完》
本文出自 “零蛋蛋” 博客,谢绝转载!
公平选择组合
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。