此题为小白书暴力求解法的训练参考
题目链接 http://acm.hust.edu.cn/vjudge/problem/19832
解题思路
用小白书里的生成排列的程序,可能有元素重复。
代码
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int maxLen = 15; char p[maxLen]; void print_permutation(int n, char *a, int cur) { if(cur == n) { a[cur] = ‘\0‘; printf("%s\n", a); } for(int i=0; i<=n; i++) if(!i || p[i]!=p[i-1]) { int c1=0, c2=0; for(int j=0; j<cur; j++) if(a[j]==p[i]) c1++; for(int j=0; j<n; j++) if(p[j]==p[i]) c2++; if(c1<c2) { a[cur] = p[i]; print_permutation(n, a, cur+1); } } } int main() { int n; scanf("%d", &n); for(int i=0; i<n; i++) { char a[maxLen]; scanf("%s", p); sort(p, p+strlen(p)); print_permutation(strlen(p), a, 0); printf("\n"); } return 0; }
时间: 2024-10-26 15:12:55