题目
In this problem you have to find the permutations using the first N English capital letters. Since there can be many permutations, you have to print the first K permutations.
Input
Input starts with an integer T (≤ 100), denoting the number of test cases.
Each case contains two integers N, K (1 ≤ N ≤ 26, 1 ≤ K ≤ 30).
Output
For each case, print the case number in a line. Then print the first K permutations that contain the first N English capital letters in alphabetical order. If there are less than K permutations then print all of them.
Sample Input
2
3 8
10 10
Sample Output
Case 1:
ABC
ACB
BAC
BCA
CAB
CBA
Case 2:
ABCDEFGHIJ
ABCDEFGHJI
ABCDEFGIHJ
ABCDEFGIJH
ABCDEFGJHI
ABCDEFGJIH
ABCDEFHGIJ
ABCDEFHGJI
ABCDEFHIGJ
ABCDEFHIJG
思路
next_permutation直接枚举组合
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <set>
#include <vector>
#define MAX_N 0x3F3F3F3F
using namespace std;
int main()
{
int T, K, N;
int k;
string str;
cin >> T;
for (int i = 1; i <= T; i++) {
cin >> N >> K;
str.clear();
for (int n = 0; n < N; n++) {
str += 'A' + n;
}
cout << "Case " << i << ":" << endl;
k = 0;
do{
cout << str << endl;
if (++k >= K) break;
} while (next_permutation(str.begin(), str.end()) );
}
return 0;
}