传送门UVa 10785 - The Mad Numerologist
水题, 题意是让你生成一个满足条件的字符串, 然后按字典序输出.
只要按顺序一个一个来就可以了.
郁闷的是我在写字符串的时候把'V'写成了'Y', WA了一次.(╯‵□′)╯ ┴─┴
一定要记得最后要按字典序输出啊...
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int cmp(const void *_a, const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return *a - *b;
}
int main()
{
//freopen("input.txt", "r", stdin);
char sword[] = "JSBKTCLDMVNWFXGPYHQZR";
char iword[] = "AUEOI";
char stemp[200];
char itemp[200];
int n;
int i, j;
int len, scnt, icnt;
int k1, k2;
int n1, n2;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
printf("Case %d: ", i + 1);
scanf("%d", &len);
scnt = icnt = 1;
k1 = k2 = 0;
n1 = n2 = 0;
memset(itemp, 0, sizeof(itemp));
memset(stemp, 0, sizeof(stemp));
for (j = 0; j < len; j++)
{
if (!(j % 2))
{
if (icnt > 21)
{
icnt = 1;
k2++;
}
itemp[n2++] = iword[k2];
icnt++;
}
else
{
if (scnt > 5)
{
scnt = 1;
k1++;
}
stemp[n1++] = sword[k1];
scnt++;
}
}
qsort(stemp, n1, sizeof(stemp[0]), cmp);
qsort(itemp, n2, sizeof(itemp[0]), cmp);
n1 = n2 = 0;
for (j = 0; j < len; j++)
{
if ((j + 1) % 2)
printf("%c", itemp[n2++]);
else
printf("%c", stemp[n1++]);
}
printf("\n");
}
return 0;
}