标签:des style io ar color os 使用 sp for
A | A#=Bb | B | C | C#=Db | D | D#=Eb | E | F | F#=Gb | G | G#=Ab |
Ab minor | A# major | A# minor | C# major | Db minor |
D# major | D# minor | Gb major | Gb minor | G# major |
Ab minor D# major G minor
Case 1: G# minor Case 2: Eb major Case 3: UNIQUE
解题思路:
本题使用的方法就是字符串中元素的替换,然而其缺点就是代码冗长,耗时较长。
程序代码:
#include<stdio.h> int main() { char a[10]; int i=1; while(gets(a)) { //printf("%s\n",a); if(a[0]=='A'&&a[1]=='#'&&a[2]==' ') { a[0]='B'; a[1]='b'; printf("Case %d: %s\n",i,a); } else if(a[0]=='C'&&a[1]=='#'&&a[2]==' ') { a[0]='D'; a[1]='b'; printf("Case %d: %s\n",i,a); } else if(a[0]=='D'&&a[1]=='#'&&a[2]==' ') { a[0]='E'; a[1]='b'; printf("Case %d: %s\n",i,a); } else if(a[0]=='F'&&a[1]=='#'&&a[2]==' ') { a[0]='G'; a[1]='b'; printf("Case %d: %s\n",i,a); } else if(a[0]=='G'&&a[1]=='#'&&a[2]==' ') { a[0]='A'; a[1]='b'; printf("Case %d: %s\n",i,a); } else if(a[0]=='B'&&a[1]=='b'&&a[2]==' ') { a[0]='A'; a[1]='#'; printf("Case %d: %s\n",i,a); } else if(a[0]=='D'&&a[1]=='b'&&a[2]==' ') { a[0]='C'; a[1]='#'; printf("Case %d: %s\n",i,a); } else if(a[0]=='E'&&a[1]=='b'&&a[2]==' ') { a[0]='D'; a[1]='#'; printf("Case %d: %s\n",i,a); }else if(a[0]=='G'&&a[1]=='b'&&a[2]==' ') { a[0]='F'; a[1]='#'; printf("Case %d: %s\n",i,a); } else if(a[0]=='A'&&a[1]=='b'&&a[2]==' ') { a[0]='G'; a[1]='#'; printf("Case %d: %s\n",i,a); } else printf("Case %d: UNIQUE\n",i); i++; } return 0; }最优代码:
#include<iostream> #include<string> using namespace std; string trans(string a){ string b=""; if(a[1]=='#'){ b+=char((a[0]-'A'+1)%7+'A'); b+='b'; }else{ b+=char((a[0]-'A'+6)%7+'A'); b+='#'; } return b; } int main(){ string a,b; for(int t=1; cin>>a>>b; t++){ cout<<"Case "<<t<<": "; if(a.length()==1) cout<<"UNIQUE"<<endl; else cout<<trans(a)<<" "<<b<<endl; } return 0; }
通过字符之间的关系进行操作(当a[1]为‘#’时,a[1]都用‘b‘替代,而此时a[0]变成比其ASC码大一的字符;当a[1]为’b‘时,a[i]都用‘#’替代,而此时a[0]变成比其ASC码小一的字符)这样省时省力。
标签:des style io ar color os 使用 sp for
原文地址:http://blog.csdn.net/yzi_angel/article/details/41483285