题目大意:有一个命理学家,要求你输出一个满足一系列规则的字符串,要求满足规则如下:
1.长度为N
2.元音字母和辅音字母的和要最小
3.元音放在奇数位,辅音放在偶数位
4.同一个元音字母最多出现21个,同一个辅音最多出现5次
5.要求字典序达到最小
解题思路:看代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char v[10] = {'A','U','E','O','I'};
char c[21] = {'J','S','B','K','T','C','L','D','M','V','N','W','F','X','G','P','Y','H','Q','Z','R'};
int main() {
int test,mark = 1,N;
scanf("%d",&test);
while(test--) {
scanf("%d",&N);
char temp[2][300];
memset(temp,'\0',sizeof(temp));
int cnt1 = 0,cnt2 = 0;
for(int i = 0; i < N; i++)
if(i % 2 == 0) {
temp[0][cnt1] = v[cnt1/21];
cnt1++;
}
else{
temp[1][cnt2] = c[cnt2/5];
cnt2++;
}
sort(temp[0],temp[0] + cnt1);
sort(temp[1],temp[1] + cnt2);
cnt1 = cnt2 = 0;
printf("Case %d: ",mark++);
for(int i = 0; i < N; i++)
if(i % 2 == 0)
printf("%c",temp[0][cnt1++]);
else
printf("%c",temp[1][cnt2++]);
printf("\n");
}
return 0;
}