NYOJ 题目835

吉他练习

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 1
描述

念情最近买了一把吉他,接着开始了他的吉他课程。老师在叫他把532123练习熟练了之后,教给了他三个和弦,C  Am  Em。要求念情按照这个顺序一直练习下去,知道老师认可才教他下一步。

可是念情刚学,经常出错,你需要做的是,判断念情是否有弹错

输入
多组测试数据
每组输入一个字符串,仅有C Am Em
字符串长度不超过200
输出
如果念情没有弹错,则输出"YES"
反之,输出"NO"
样例输入
CAmEmCAmEmCAmEmCAmEm
CAmEmCCAmEm
CAmEmCAm
样例输出
YES
NO
YES
提示
不一定非要把三个和弦弹完,只要顺序正确就行
这道题一开始写的时候认为AmEmCAmEm,或者是EmCAmEm这类的顺序也可以,因为最后提示说“不一定非要把三个和弦弹完,只要顺序正确就可以”,后来发现这句话是指弹完一个完整的节奏后面的调子。思路的话先求出字符串长度,求出除以5的余数及商,然后先5个5个一判断是否符合CAmEm,之后的余数根据顺序一个一个判断字符是否相同即可。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    int i,j,n,m,Len1,k,t;
    char s[300]={0};
    while(scanf("%s",s)!=EOF)
    {
        Len1=strlen(s);
        n=Len1/5;
        m=Len1%5;
        for(i=0,k=0;i<n*5;i=i+5)
        {
        	if((s[i]=='C')&&(s[i+1]=='A')&&(s[i+2]=='m')&&(s[i+3]=='E')&&(s[i+4]=='m'))
                k++;
            else
                break;
        }
        if(m==0)
        {
            if(k==n)
                printf("YES\n");
            else
                printf("NO\n");
           	continue;
        }
        if(m==1)
        {
            if((s[i]=='C')&&(k==n))
                printf("YES\n");
            else
                printf("NO\n");
            continue;
        }
        if(m==2)
        {
			if((s[i]=='C')&&(k==n)&&(s[i+1]=='A'))
                printf("YES\n");
            else
            	printf("NO\n");
            continue;
        }
        if(m==3)
        {
            if((s[i]=='C')&&(k==n)&&(s[i+1]=='A')&&(s[i+2]=='m'))
                printf("YES\n");
            else
                printf("NO\n");
            continue;
        }
        if(m==4)
        {
        	if((s[i]=='C')&&(k==n)&&(s[i+1]=='A')&&(s[i+2]=='m')&&(s[i+3]=='E'))
                printf("YES\n");
            else
            	printf("NO\n");
            continue;
        }
    }
    return 0;
}

发布了45 篇原创文章 · 获赞 1 · 访问量 6799

猜你喜欢

转载自blog.csdn.net/Ls_attack/article/details/75144078