P11445 「ALFR Round 3」A 调皮的学生 题解
luoguofwangliming · · 题解
知识点分析
本题涉及三个知识点。
-
if 语句
-
for 循环
-
桶数组
题目分析
输入分析
我们先看输入,发现三种老师的输入结构都是一样的,所以可以得到输入代码(其中,
int abc,n;
cin>>n;
for(int i=1;i<=3;i++)
{
cin>>abc;
int xyz[abc+1];//开小会RE
for(int j=1;j<=abc;j++)
{
cin>>xyz[j];
}
}
//存储语句
但是还有一种方法,叫边输入边判断,这样子就能让代码更简洁(其中,
int abc,xyz,n;
cin>>n;
for(int i=1;i<=3;i++)
{
cin>>abc;
for(int j=1;j<=abc;j++)
{
cin>>xyz;
//存储语句
}
}
数据格式化
然后看到如何存储小朋友的投票次数,这里涉及到一个叫做桶数组的语法,也就是只存储状态的数组。
桶数组是要在
int a[n+1];//开小会RE
for(int i=0;i<=n;i++)
{
a[n]=0;
}
这样子,我们就定义好了桶数组,接下来,就要开始存储数据了。
我们一般将桶数组的元素编号称为学号,把桶数组的数值称为投票次数,这样,就能得到以下代码(
a[xyz]++;//学号为xyz的学生投票次数加一
数据判断
最后,扫描整个桶数组,但是我们得要加一个条件。
这个条件得在题目中找。
但有些学生常常会为多位老师评分,或者不为任何老师评分。
这就是判断调皮的学生的条件,也就是投票次数
那么,我们可以得到以下代码(其中,
if(n!=1)
{
tp++;
}
再加上一个 for 循环(其中,
for(int i=0;i<=n;i++)
{
if(a[i]!=1)
{
tp++;
}
}
代码
我们的代码就完成了,接下来把代码组合一下,就能完成了。
#include<bits/stdc++.h>//万能头好习惯
using namespace std;
int a[500];//开大一点,不然会RE
int main()
{
int abc,xyz,tp=0,n;//tp一定要等于0,不然会输出随机数
cin>>n;//别忘了这一句,不然会编译错误
for(int i=1;i<=3;i++)
{
cin>>abc;//输入a,b,c结构都是一样的,所以可以用一份代码
for(int j=1;j<=abc;j++)//不能用i,不然会改变原变量,导致WA
{
cin>>xyz;//输入每个学生学号
a[xyz]++;
}
}
for(int i=1;i<=n;i++)//扫描整个桶
{
if(a[i]!=1)
{
tp++;
}
}
cout<<tp;//输出结果
return 0;
}
AC 记录。