排列问题
2017-10-07 10:39
155 查看
擅长排列的小明
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。
输入第一行输入整数N(1<N<10)表示多少组测试数据,
每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)
输出在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例
样例输入
2 3 1 4 2
样例输出
1 2 3 12 13 14 21 23 24 31 32 34 41 42 43
来源[hzyqazasdf]原创
上传者hzyqazasdf
思路:
通过两个数组进行排序,一个数组作为 标识数组, 另一个作为 存序的数组,递归解决。
代码:
#include<stdio.h> int n, m; / / 代表 n 个数中 选 m 个进行排序 int a[11]; int b[11]; void fun(int t){ int i; if( t == m+1 ){ for( i = 1;i <= m; i ++) printf("%d", a[i]); printf("\n"); } for(i = 1;i <= n;i ++){ if( b[i] == 0 ){ / / b[ ] 标识 a[ ] 的值 a[t] = i; b[i] = 1; fun( t+1 ); b[i] = 0; } } } int main(){ int N,i; scanf("%d",&N); while(N--){ for(i=1;i<=10;i++) b[i]=0; / / 初始化标志位 scanf("%d%d",&n ,&m); fun(1); } return 0; }
n 个数中选 m 个数进行排列,组合中的值从大到小排列
组合数
时间限制:3000 ms | 内存限制:65535 KB难度:3
描述找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入输入n、r。
输出按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543 542 541 532 531 521 432 431 421 321
来源[苗栋栋]原创
上传者苗栋栋
思路:思路和上一个差不多,只不过添上几个约束条件!
代码:
#include<stdio.h> int n, m; int a[11] = {11}; int b[11]; void fun(int t){ int i; if( t == m + 1 ){ for( i = 1;i <= m; i ++) printf("%d", a[i]); printf("\n"); } for(i = n;i >= 1;i --){ // 采用递减 if( b[i] == 0 && a[t-1] > i){ / /判定排序时从小到大的 a[t] = i; b[i] = 1; fun( t+1 ); b[i] = 0; } } } int main(){ int i; while(~scanf("%d%d",&n,&m)){ for(i = 1;i <= 10;i ++) b[i] = 0; fun(1); } return 0; }
相关文章推荐
- 递归求解几类排列组合问题(一、类循环组合排列)
- 全排列问题
- 洛谷 P1439 排列LCS问题
- 有重复元素的排列问题
- 雇佣问题随机排列数组(permuteBySorting)-c++代码实现及运行实例结果
- 回溯法求排列问题
- 解题笔记(21)——字符串的排列组合问题
- 全排列问题
- 全排列问题
- 超简单的组合排列问题
- STL系列问题--全排列
- 04-04排列问题_奇怪的比赛
- 8594 有重复元素的排列问题
- 排列问题
- (隐式图)八数码问题(三种判重方法:排列计数、哈希技术、STL_set判重)
- 算法总结(9)--全排列问题
- 算法设计与分析习题3-3 石子合并问题直线排列最大得分
- 一些简单的排列组合问题
- 全排列问题
- 【递归】排列问题,整数划分问题,Hanoi