P7644 [COCI2012-2013#5] LJESTVICA 题解

· · 题解

题目:P7644 [COCI2012-2013#5] LJESTVICA

思路:

本题只需将字符串从头到尾跑一遍即可,判断每个小节的第一个字符是哪种音节的主调(从题目中可知),然后再将那个音节的计数的变量上加 1 即可。

最后输出主调个数多的音阶。若相等,则查看字符串的最后一个字符,是什么字母就输出什么音阶。

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    string a;
    cin>>a;
    int n=a.size(),x=0,y=0;//x计C调主调的个数,y计A调主调的个数
    for(int i=0;i<=n-1;i++){
        if(i==0 || a[i-1]=='|'){//判断是不是每个小节的第一个,注意a[0]也是
            if(a[i]=='C' || a[i]=='F' || a[i]=='G') x++;//C调主调
            if(a[i]=='A' || a[i]=='D' || a[i]=='E') y++;//A调主调
        }
    }
    if(x>y) cout<<"C-dur";
    if(x<y) cout<<"A-mol";
    if(x==y){//若主调个数相等
        //查看最后一个字符
        if(a[n-1]=='C') cout<<"C-dur";
        else cout<<"A-mol";
    }
    return 0;
}