1144: 组合的输出
来源:互联网 发布:觉得自己很透明知乎 编辑:程序博客网 时间:2024/05/22 13:20
1144: 组合的输出
Description
排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r<=n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 现要求你不用递归的方法输出所有组合。 例如n=5,r=3,所有组合为: l 2 3 l 2 4 1 2 5 l 3 4 l 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
Input
一行两个自然数n、r(1< n < 21,1<= r <=n)。
Output
所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。
Sample Input
5 3
对于STL排列函数next_permutation(a , a + n)的应用
n 为选取 n 个数进行排列求下一个排列,且下一个排列比当前大但按字典序是最小的排列
例如:例题选取下标 3 4 5 作为标记 1 ,其余为 0 。则我们可以先输出排列数为 0 的(下标数 +1) (0 + 1 =)1 (1 + 1 = )2 (2 + 1 = )3 (即当前数组为 0 0 0 1 1 1
输出后进入排列。。可以排列出的数字为 0 0 1 0 1 1,因为作为数字看001011 比未排前的大但却又是最小。
因此,根据数组里数字为 0 的数,可以输出其下标加 1 ,然后继续循环
#include<cstdio>#include<cstring>#include<iostream>#include<utility>#include<string>#include<vector>#include<algorithm>#include<queue>#include<cstdlib>#include<cmath>#include<stack>using namespace std;int main(){#ifndef ONLINE_JUDGEfreopen("1.txt","r",stdin);#endifint n , m , a[25];cin >> n >> m ;memset(a,0,sizeof(a));for(int i = n; i >= m ; i--){a[i]=1;}do{for(int i = 0; i < n; i++){if(!a[i]){printf("%3d",i+1);}}cout << endl;}while(next_permutation(a , a + n));return 0;}
0 0
- 1144: 组合的输出
- 组合数的输出
- 组合数据的输出
- 数的组合输出
- 【4005】组合的输出
- 组合的输出
- 组合的输出
- 组合的输出
- 字符串的排列输出 和组合输出
- 输出1234的所有组合
- 组合的输出 解题报告
- 输出组合排列的方案
- 洛谷P1157 组合的输出
- 输出数组的全部组合
- 组合的输出pascal程序
- 【递归入门】组合的输出
- 输出字符串的所有组合
- 【递归入门】组合的输出
- 自定义ADT创建项目向导
- RHEL/CentOS 7.x的几点新改变
- 为什么ios模拟器出现不了内存不足的问题,而真机会
- STL中set用法详解
- UVa 10689 - Yet another Number Sequence
- 1144: 组合的输出
- Java-Java语言基础
- Linux下通过crontab及expect实现自动化处理
- Majority Element
- Oracle APEX 4.2安装 与Oracle PL/SQL Gateway的配置
- 主从错误UUID
- 【数据结构】堆heap,Trie树,位图Bitmap
- Linux route 使用
- 蓝桥杯 VIP 基础练习 Huffuman树