问题标题: 酷町堂:7245 小红的乐谱

0
0
已解决
熊潇然
熊潇然
初级启示者
初级启示者

题目链接: 酷町堂:7245

7245   小红的乐谱

经验值:1200 时间限制:1000毫秒 内存限制:128MB

题目描述 Deion

小红很喜欢唱歌,元旦快到了,她想在学校的元旦晚会上表演唱歌。于是早早地就拿着乐谱准备排练了。同桌小明对小红的乐谱很好奇,小红告诉小明, A 小调音阶为 {A,B,C,D,E,F,G},C 大调音阶为{C,D,E,F,G,A,B}。每个音阶的第一个、第四个和第五个音称为主调。现在需要判断小红的乐谱是 A 小调还是 C 大调。
判断方法:判断乐谱中每一个小节的第一个音符,是A 小调的主调还是 C 大调的主调,最后判断哪个音阶的主调个数更多。
如果两者个数一样多,取整个乐谱的最后一个音符所属的音阶。最后一个音符为 A 则属于 A 小调,否则属于 C 大调
小明听着有点迷糊了,我们一起帮小明判断吧。

输入描述 Input Deion

输入一行,一个字符串,字符串中只包含大写字母ABCDEFG和“|”,“|”用来分隔小节。

输出描述 Output Deion

输出一行,一个字符串。如果是C大调,输出字符串“C-dur”;如果是A小调,输出字符串“A-mol”。

样例输入 Sample Input

ABDC|CDBA|GACF

样例输出 Sample Output

C-dur

数据范围及提示 Data Size & Hint

乐谱长度用s表示
5≤ s ≤100

 

错误代码 WA 50分:

#include<bits/stdc++.h>
using namespace std;
string s;
int c,a;
bool f;
int main(){
    cin>>s;
    s='|'+s;
    for(int i=0;i<s.size();i++){
        if(s[i]=='|'&&s[i+1]=='C'){
            c++;
            f=1;
        }else if(s[i]=='|'&&s[i+1]=='A'){
            a++;
            f=0;
        }
    }
    if(c>a){
        cout<<"C-dur";
    }else if(a>c){
        cout<<"A-mol";
    }else{
        if(s[s.size()-1]=='A'){
            cout<<"A-mol";
        }else{
            cout<<"C-dur";
        }
    }
    return 0;
}

求大佬指点


0
已采纳
丁梓豪
丁梓豪
新手天翼
新手天翼

你循环里的if判断错了: 
这题A 小调的主调还是 C 大调的主调分别都有3个
A 小调的主调: A D E
C 大调的主调: C F G
 

我要回答