字符串按要求的字典序
2Y
通过num来记录每个单词的输出次数
通过f来判别是否是元音
#include<stdio.h>
int f(char s){
if(s=='A')return 0;
if(s=='E')return 0;
if(s=='I')return 0;
if(s=='O')return 0;
if(s=='U')return 0;
return 1;
}
int main(){
int k,z;
scanf("%d",&z);
for(k=1;k<=z;k++){
int n,i,j;
int l,r;
scanf("%d",&n);
r=n/2;
l=(n+1)/2; //l是元音个数,r是辅音个数
char yuan[]="AUEOI";
int num[26],pyu=0;
for(i=0;i<26;i++)num[i]=0;
for(i=0;i<l;i++){
num[yuan[pyu]-'A']++;
if(num[yuan[pyu]-'A']==21)pyu++;
}
char fu[]="JSBKTCLDMVNWFXGPYHQZR";
int pfu=0;
for(i=1;i<=r;i++){
num[fu[pfu]-'A']++;
if(num[fu[pfu]-'A']==5)pfu++;
}
printf("Case %d: ",k);
for(i=1;i<=n;i++){
int aim;
if(i%2==1)aim=0;
else aim=1;
for(j=0;j<26;j++){
if(aim==f('A'+j)){
if(num[j]){
printf("%c",'A'+j);
num[j]--;
break;
}
}
}
}printf("\n");
}
return 0;
}
题目:
这个名字有一个固定的长度N
先保证元音字母的价值和辅音字母的价值要最小,再保证名字要在字典序里面最小
第一个字符表示为1,元音字母在奇数位置,辅音在偶数位置
同一辅音最多出现5次,元音21次
第一行为数据数目N ( 0 < N <=250 )
以下N行包括一个数n( 0 < n < 211 ),表示你要输出的名字长度
本文介绍了一个生成固定长度名字的算法,确保元音和辅音的最小价值,并且名字在字典序中是最小的。名字长度由输入确定,遵循特定规则安排元音和辅音的位置。
458

被折叠的 条评论
为什么被折叠?



