本文主要是介绍西南民族大学第十一届程序设计竞赛 G We are singers,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:https://ac.nowcoder.com/acm/contest/3571/G
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 102400K,其他语言204800K
64bit IO Format: %lld
题目描述
在简谱中,音符是记录音的高低和长短的符号。而用来表示这些音的高低的符号,是用七个阿拉伯数字作为标记,它们的写法是:1、2、3、4、5、6、7,读法为:do、re、mi、fa、sol、la、si。现在给你一段由N个音符构成的简谱,以及唱出来的读音(长度小于10的字符串)的记录,请你判断总共唱错了几个读音。
输入描述:
第一行输入一个整数N(0< N\leq10^{4}0<N≤10
4
);
第二行包含N个数字构成的简谱,数字间用空格隔开;
第三行包含N个读音,读音间用空格隔开.
输出描述:
总共唱错的读音个数.
示例1
输入
8
1 2 3 4 5 6 7 1
do re mi fa sol la si der
输出
1
说明
仅最后一个读音唱错.
分析:用一个字符数组储存角标对应字母音符,一个数组储存输入的数字音符,一个字符串储存输入的字母音符,输入的数字音符作角标,与后者进行匹配。
代码
#include <stdio.h>
#include <string.h>
int ar[10000];
char s[10000][4];
int main()
{
char yf[8][4]={" “,“do”,“re”,“mi”,“fa”,“sol”,“la”,“si”};
int i,j,k,n,wrg=0;
scanf(”%d",&n);
for(i=0;i<n;i++)
scanf("%d",&ar[i]);
for(i = 0;i<n;i++)
scanf("%s",s[i]);
for(i = 0;i<n;i++)
if(strcmp(s[i],yf[ar[i]])!=0)
wrg++;
printf("%d",wrg);
return 0;
}
总结:
一、自己没过的原因:
1、忽略了数组下标和对应字母数组差一的问题。
2、忘记了怎么输入用空格隔开的字符串(空格不要存进去)
二、解决
1、因音符是1234567 do re mi fa so la si
①不使用第一个元素str[0],从str[1]开始
②输入的数字音符-1,于是1对应str[0],为do
2、用scanf("%s",str),输入字符串遇到空格停止,空格不输入。
这篇关于西南民族大学第十一届程序设计竞赛 G We are singers的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!