题意:元音字母放在奇数位,辅音字母放在偶数位,元音个数不超过21个,辅音不超过5个,要求各位代表数字之和最小,最后按字典序排序输出。
代码:
#include <stdio.h>
#include <algorithm>
using namespace std;
//直接按权值排列
char vow[] = "AUEOI";
char con[] = "JSBKTCLDMVNWFXGPYHQZR";
int main()
{
#ifdef LOCAL
freopen("in.txt", "r", stdin);
#endif // LOCAL
int ncase;
scanf("%d", &ncase);
for (int t = 1; t <= ncase; t++)
{
int n;
char odd[212], even[212];
int nodd = 0, neven = 0;
int ocnt = 0, ecnt = 0;
int vcnt = 0, ccnt = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
if (i & 1)
{
odd[nodd++] = vow[vcnt];
ocnt++;//计出现次数
if (ocnt >= 21)
{
vcnt++;
ocnt = 0;
}
}
else
{
even[neven++] = con[ccnt];
ecnt++;
if (ecnt >= 5)
{
ccnt++;
ecnt = 0;
}
}
}
printf("Case %d: ", t);
sort(odd, odd + nodd);
sort(even, even + neven);
nodd = 0;
neven = 0;
for (int i = 1; i <= n; i++)
{
if (i & 1)
printf("%c", odd[nodd++]);
else
printf("%c", even[neven++]);
}
printf("\n");
}
return 0;
}