A. 拼音魔法
A. 拼音魔法
Time limit per test: 1.0 seconds
Time limit all tests: 1.0 seconds
Memory limit: 256 megabytes
Accept / Submit: 341 / 2134
魔法学校小学一年级有一种题。就是给一个字的拼音,给一个声调,让你正确地注音。但魔法老师给了巨量的题,你不用魔法根本不可能做完。所以现在要让你发明一种魔法完成这个任务。
问题已经讲完了,下面开始教授汉语。(会汉语或者自认为会汉语的可以自动跳过)
汉语中一个字的拼音由声母和韵母两部分组成,在极少数情况下也会没有声母,但一定有韵母。
一般认为,声母有 b, p, m, f, d, t, l, n, g, k, h, j, q, x, z, c, s, zh, ch, sh, r, y, w;韵母有:a, e, o, i, u, ü, ai, ei, ui, ao, ou, iu, ie, üe, er, an, en, in, un, ün, ang, eng, ing, ong。
不是所有的字母都能组合的,组合的时候有时会发生一些神奇的事情,例如 üe 变成了 ue。但是标调规则有如下口诀:
有 a 先找 a,没 a 找 o e,i u 并排标在后,这样标调不会错。
只有下面列出的元素可能会被标调。请按照下表输出(尤其注意 a 不要输出成 ɑ 了):
- 第一声:ā ē ī ō ū ǖ。
- 第二声:á é í ó ú ǘ。
- 第三声:ǎ ě ǐ ǒ ǔ ǚ。
- 第四声:à è ì ò ù ǜ。
- 轻声:a e i o u ü。
辅助材料:由教育部公布的拼音方案。如果有描述不一致的地方,请以本题描述为准。
Input
第一行一个整数 T (1≤T≤105)。
下面 T 行,每行一个拼音:拼音声调在各个拼音之后,用数字 [1-4] 进行表示。例如 zhong1 guo2。没有数字的说明是轻声,不用标调。
按照国际惯例,输入文件全部由 ASCII 编码组成。ü 用 v 来代替。但在输出中,应仍然用 ü 来表示。
Output
对于每一组数据,输出 Case x: y。其中 x 是从 1 开始的测试数据编号,y 是一个拼音标调后的答案。
注意:对于非 ASCII 字符的输出,请使用 UTF-8 编码。
Examples
5
zhong1
guo2
me
que1
nv3
Case 1: zhōng
Case 2: guó
Case 3: me
Case 4: quē
Case 5: nǚ
Note
会 C/C++ 的魔法师最可爱了。
/*
* @Author: lyucheng
* @Date: 2017-05-12 18:42:32
* @Last Modified by: lyucheng
* @Last Modified time: 2017-05-12 21:37:29
*/ #include <bits/stdc++.h>
using namespace std;
string str;
int t;
string tr(char x,int n){
if(x=='a'){
if(n==){
return "ā";
}else if(n==){
return "á";
}else if(n==){
return "ǎ";
}else if(n==){
return "à";
}
}else if(x=='e'){
if(n==){
return "ē";
}else if(n==){
return "é";
}else if(n==){
return "ě";
}else if(n==){
return "è";
}
}else if(x=='i'){
if(n==){
return "ī";
}else if(n==){
return "í";
}else if(n==){
return "ǐ";
}else if(n==){
return "ì";
}
}else if(x=='o'){
if(n==){
return "ō";
}else if(n==){
return "ó";
}else if(n==){
return "ǒ";
}else if(n==){
return "ò";
}
}else if(x=='u'){
if(n==){
return "ū";
}else if(n==){
return "ú";
}else if(n==){
return "ǔ";
}else if(n==){
return "ù";
}
}else if(x=='v'){
if(n==){
return "ǖ";
}else if(n==){
return "ǘ";
}else if(n==){
return "ǚ";
}else if(n==){
return "ǜ";
}
}
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&t);
for(int ca=;ca<=t;ca++){
printf("Case %d: ",ca);
cin>>str;
string s="";
int n=str.size();
int op=str[n-]-''; //是不是摘帽子
bool ft=false;
for(int i=;i<n;i++){
if(str[i]=='y'||str[i]=='j'||str[i]=='q'||str[i]=='x'||str[i]=='e'){
ft=true;
break;
}
}
for(int i=;i<n;i++){
if(str[i]=='v'){
if(ft==true)
str[i]='u';
}
} //如果最后一位有整数
if(op>=&&op<=){
bool flag=false;
//先找a
s="";
for(int i=;i<n;i++){
if(str[i]=='a'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
flag=true;
break;
}
}
if(flag==true){
cout<<str<<endl;
continue;
} //再找o e
s="";
for(int i=;i<n;i++){
if(str[i]=='o'||str[i]=='e'){
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
if(flag==true){
cout<<str<<endl;
continue;
} //然后找 u i
bool f1=false;
bool f2=false;
for(int i=;i<n;i++){
if(str[i]=='i') f1=true;
if(str[i]=='u'||str[i]=='v') f2=true;
}
//如果是并存的
if(f1==true&&f2==true){
for(int i=;i<n;i++){
if(str[i]=='i'||str[i]=='u'||str[i]=='v'){
//加后边那一个
if(f1==true){
f1=false;
continue;
}
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else if(str[i]=='u'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
}else{
//否则的话就加第一个
for(int i=;i<n;i++){
if(str[i]=='i'||str[i]=='u'||str[i]=='v'){
if(str[i]=='o'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else if(str[i]=='u'){
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}else{
for(int j=;j<i;j++){
s+=str[j];
}
s+=tr(str[i],op);
for(int j=i+;j<n-;j++){
s+=str[j];
}
str=s;
}
flag=true;
break;
}
}
}
cout<<str<<endl;
}else{
cout<<str<<endl;
}
}
return ;
}
A. 拼音魔法的更多相关文章
- EOJ 3256 拼音魔法
模拟. 有$a$先标$a$,其次是$o$和$e$,$o$和$e$在韵母中不会同时存在.最后是$u$和$i$,这两个字母在韵母中可能同时存在,标在后面的那个.输出那些字符的话直接输出就可以了. 举几个例 ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- iOS 汉字的拼音
获取汉字的拼音 #import <Foundation/Foundation.h> @interface NSString (Utils) /** * 汉字的拼音 * * @return ...
- Oracle汉字转拼音package
--函数GetHzFullPY(string)用于获取汉字字符串的拼音 --select GetHzFullPY('中华人民共和国') from dual; --返回:ZhongHuaRenMinGo ...
- Ubuntu 下ibus拼音输入法启用 (ubuntu 16.04
Ubuntu 下ibus拼音输入法启用 我安装的是英文版的ubuntu 16.04,打开只带英文,并没有中文. 设置输入法为iBus 从system settings 进入language suppo ...
- JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
转:http://www.codeceo.com/article/javascript-pinyin.html 前言 网上关于JS实现汉字和拼音互转的文章很多,但是比较杂乱,都是互相抄来抄去,而且有的 ...
- lumia手机wp系统应用列表如何设置按照拼音
1.安装应用多了就会这样·· 2.想用拼音排列,请把系统设置里的区域语言中的区域和格式改为中国,此时,屏幕壁纸上是"四月十五日". 3.想用笔画排列,请把系统设置里的区域语言中的区 ...
- SQL汉字转拼音函数-支持首字母、全拼
SQL汉字转拼音函数-支持首字母.全拼 FROM :http://my.oschina.net/ind/blog/191659 作者不详 --方法一sqlserver汉字转拼音首字母 --调用方法 s ...
- Mono 3.2 测试NPinyin 中文转换拼音代码
C#中文转换为拼音NPinyin代码 在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...
随机推荐
- [UIKit学习]00.关于前置知识(storyboard,UIViewController,类扩展,项目属性)
storyboard文件的认识 用来描述软件界面 默认情况下,程序一启动就会加载Main.storyboard 加载storyboard时,会首先创建和显示箭头所指的控制器界面 IBAction和IB ...
- LINUX通过PXE自动部署系统
原理介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂.开销不大的 ...
- 在Storyboard中为UITableView添加Header和Footer
我在这里所说的Header和Footer并不是sectionHeader和sectionFooter,而是指UITableView的tableHeaderView和tableFooterView,这两 ...
- mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server D:\Wamp\mysql-\b ...
- EXISTS/NOT EXISTS CASE WHEN等使用方法
--简单判断用法 WHERE EXISTS (SELECT * FROM cpay..System_Setting) --可以替换count ) FROM cpay..System_Setting U ...
- springMVC中的redirect和forward区别?
1.forward在跳转后可以取到message值,redirect在跳转后无法取到message值. 2.forward跳转后地址栏URL不会改变,而redirect会改变.
- Python自学笔记-面向对象相关(Mr seven)
---恢复内容开始--- http://www.cnblogs.com/wupeiqi/articles/5433893.html 类的成员可以分为三大类:字段.方法和属性. 一.字段 字段包括:普通 ...
- 我修改的时钟flash
<object type="application/x-shockwave-flash" style="outline:none;" data=" ...
- MVC中View界面数据呈现示例
@using System.Text; @model List<MvcShopping.Models.ProductCategory> @{ ViewBag.Title = "测 ...
- Weave Scope 多主机监控 - 每天5分钟玩转 Docker 容器技术(81)
除了监控容器,Weave Scope 还可以监控 Docker Host. 点击顶部 HOSTS 菜单项,地图将显示当前 host. 与容器类似,点击该 host 图标将显示详细信息. host 当前 ...