您的位置:首页 > 其它

UVA-10785 The Mad Numerologist

2016-07-20 21:14 435 查看
2016-07-20


UVA-10785 The Mad Numerologist

题目大意:每个字母有一个权值,给定一个长度,构造名字。要求权值最小,奇数位原音,偶数位辅音,且按字母序输出。每个原音最多用 5 次,辅音 21 次。

解题思路:按权值顺序存到数组,排序后组合输出。

注意:对除法的运用,对于整型/是向下取整的。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
using namespace std;

char y[] = {"AUEOI"};
char f[] = {"JSBKTCLDMVNWFXGPYHQZR"};
int t[1000];
char str1[10000];//偶数辅音
char str2[10000];//奇数元音

int cmp(const void *a , const void *b) {
return ( *(char*)a - *(char*)b );
}

int main() {
int n;
scanf("%d",&n);
for (int i = 0; i < n; i++) {
memset( str1 , '\0' , sizeof(str1) );
memset( str2 , '\0' , sizeof(str2) );
scanf("%d",&t[i]);
for (int j = 0; j < t[i]/2; j++)
str1[j] = f[j/5];
for (int j = 0; j < t[i] - t[i]/2; j++)
str2[j] = y[j/21];
qsort( str1 , t[i]/2 , sizeof(str1[0]) , cmp );
qsort( str2 , t[i] - t[i]/2 , sizeof(str2[0]) , cmp );
cout << "Case " << i + 1 << ": ";
int a = 0, b = 0;
for (int j = 1; j <= t[i]; j++) {
if ( j % 2 )
cout << str2[a++];
else    cout << str1[b++];
}
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: