- 成绩出来就知道了(难度:B-)
/*考试结束了,云云和舟舟开始对答案。
一共有n道单选题,每道题都有ABCD四个选项,每道题正确得 1 分,错误不得分。
云云和舟舟互相知道了他们每道题选择的选项。
他们想知道,两个人得分之和有可能达到的最大值和最小值是多少?*/
输入描述:
第一行输入一个正整数(1≤n≤6666)代表一共有n道题,
第二行输入n个字符('A'、'B'、'C'、'D'中的一种),用空格隔开。代表云云的选项。
第三行输入n个字符('A'、'B'、'C'、'D'中的一种),用空格隔开。代表舟舟的选项。
输出描述:
得分之和的能达到的最大值和最小值。
用空格隔开。
思路:因为正确答案未知,则假设其中一人全对,统计另外一个人与其答案相同个数,即为题目所求最大值,最小值即为2者都错即为0.
知识点:构造字符串数组,并比较同一位置是否相同。
代码:
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
char a[6667]={};
char b[6667] ={};
for(int i = 0;i<n;i++)
{
scanf("%s",a);//scanf会以空格作为结束标志
}
for(int j = 0;j<n;j++)
{
scanf("%s",b);
}
int s = n;
for(int k = 0;k<n;k++)
{
if(a[k] == b[k])
{
s = s + 1;
}
}
printf("%d\n",s);//最大值
printf("%d",0);//最小值
return 0;
}
现在,我们将问题升级:假设输入答案时中间不以括号隔开又该如何处理?
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
getchar();//清除回车 ,不然会对后面造成影响 ,推荐自行查阅scanf的工作原理 。
char a[6667]={};
char b[6667] ={};
for(int i = 0;i<n;i++)
{
scanf("%c",&a[i]);
}
getchar();//清除回车
for(int j = 0;j<n;j++)
{
scanf("%c",&b[j]);
}
getchar();//同上
int s = n;
for(int k = 0;k<n;k++)
{
if(a[k] == b[k])
{
s = s + 1;
}
}
printf("%d\n",s);//最大值
printf("%d",0);//最小值
return 0;
}