19-擅长排列的小明

题目描述:

小明十分聪明,而且十分擅长排列计算。比如给小明一个数字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

AC代码:其实思路很简单,对n个进行全排,然后截取前m个,这里截取的m个不能重复!!!

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
char a[9]={'1','2','3','4','5','6','7','8','9'};
int main(){
  int t,n,m;
  cin >> t;
  while(t--){
    cin >> n >> m;
    string s="";
    for(int i=1;i<=n;i++)
    s+=a[i-1];
    string s1 = s.substr(0,m); 
    cout << s1 << endl;
    do{
        if(s1!=s.substr(0,m)){
                s1=s.substr(0,m);
                cout<<s1<<endl;
        }
    }
    while(next_permutation(s.begin(),s.end()));
  }
  return 0;
}

 

点赞