EOJ 3256 拼音魔法

模拟。

有$a$先标$a$,其次是$o$和$e$,$o$和$e$在韵母中不会同时存在。最后是$u$和$i$,这两个字母在韵母中可能同时存在,标在后面的那个。输出那些字符的话直接输出就可以了。

举几个例子:

3

shui2

Case 1: shuí

liu2

Case 2: liú

lve4

Case 3: lüè

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; char s[10000];
int T, len, cas = 1;
int diao; void A()
{
if(diao==1) printf("ā");
if(diao==2) printf("á");
if(diao==3) printf("ǎ");
if(diao==4) printf("à");
} void E()
{
if(diao==1) printf("ē");
if(diao==2) printf("é");
if(diao==3) printf("ě");
if(diao==4) printf("è");
} void I()
{
if(diao==1) printf("ī");
if(diao==2) printf("í");
if(diao==3) printf("ǐ");
if(diao==4) printf("ì");
} void O()
{
if(diao==1) printf("ō");
if(diao==2) printf("ó");
if(diao==3) printf("ǒ");
if(diao==4) printf("ò");
} void U()
{
if(diao==1) printf("ū");
if(diao==2) printf("ú");
if(diao==3) printf("ǔ");
if(diao==4) printf("ù");
} void V()
{
if(diao==1) printf("ǖ");
if(diao==2) printf("ǘ");
if(diao==3) printf("ǚ");
if(diao==4) printf("ǜ");
} void work()
{
int f=0;
for(int i=0;i<len-1;i++) if(s[i]=='a') f=1; if(f==1)
{
for(int i=0;i<len-1;i++)
{
if(s[i]=='a') A();
else
{
if(s[i]=='v') printf("ü");
else printf("%c",s[i]);
}
}
printf("\n");
return ;
} for(int i=0;i<len-1;i++) if(s[i]=='e') f=1; if(f==1)
{
for(int i=0;i<len-1;i++)
{
if(s[i]=='e') E();
else
{
if(s[i]=='v') printf("ü");
else printf("%c",s[i]);
}
}
printf("\n");
return ;
} for(int i=0;i<len-1;i++) if(s[i]=='o') f=1; if(f==1)
{
for(int i=0;i<len-1;i++)
{
if(s[i]=='o') O();
else
{
if(s[i]=='v') printf("ü");
else printf("%c",s[i]);
}
}
printf("\n");
return ;
} for(int i=0;i<len-1;i++) if(s[i]=='v') f=1; if(f==1)
{
for(int i=0;i<len-1;i++)
{
if(s[i]=='v') V();
else printf("%c",s[i]);
}
printf("\n");
return ;
} for(int i=len-1;i>=0;i--)
{
if(s[i]=='i') { f=1; break; }
if(s[i]=='u') { f=2; break; }
} if(f==1)
{
for(int i=0;i<len-1;i++)
{
if(s[i]=='i') I();
else
{
if(s[i]=='v') printf("ü");
else printf("%c",s[i]);
}
}
printf("\n");
return ;
} if(f==2)
{
for(int i=0;i<len-1;i++)
{
if(s[i]=='u') U();
else
{
if(s[i]=='v') printf("ü");
else printf("%c",s[i]);
}
}
printf("\n");
return ;
} } int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
len = strlen(s); printf("Case %d: ",cas++);
if(s[len-1]>='0'&&s[len-1]<='9')
{
diao = s[len-1]-'0';
work();
}
else
{
for(int i=0;i<len;i++)
{
if(s[i]=='v') printf("ü");
else printf("%c",s[i]);
}
printf("\n");
}
}
return 0;
}
上一篇:Lua的函数调用和协程中,栈的变化情况


下一篇:android - Animation详解