C++代码纠错:统计被所有同学喜欢的课程数量
C++代码纠错:统计被所有同学喜欢的课程数量
本文将分析一段C++代码,该代码旨在统计被所有同学喜欢的课程数量。我们会找出代码中的错误,并提供修改后的正确版本。
原始代码:
#include<iostream>
using namespace std;
int main()
{
int m=0,n=0,h=0,b=0,num=0;
cin>>n>>m;
int a[1000]={0};
for(int i=1;i<=n;i++)
{cin>>h;
for(int j=1;j<=h;j++)
{cin>>b;
a[b]++;}
}
for(int i=1;i<=m;i++)
{
if(a[i]==n){num++;}
}
cout<<num;
return 0;
}
代码分析与错误:
这段代码存在以下问题:
-
数组大小问题: 数组
a的大小为 1000,可能超出了题目给定的 M 的范围。题目中给定的 M 最大为 1000,所以数组大小应设为 M+1,以防止数组越界。 -
循环次数错误: 在第一个
for循环中,循环条件应该是j <= h,而不是j < h。这是因为每个同学喜欢的课程数量是h,所以循环的次数应该是h。 -
判断条件错误: 在第二个
for循环中,判断条件应该是if(a[i] == n),而不是if(a[i] == m)。题目要求的是被所有调查到的同学都喜欢的课程数量,所以应该是等于n。
修改后的代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0, m = 0, h = 0, b = 0, num = 0;
cin >> n >> m;
int a[1001] = {0}; // 数组大小为 M+1
for (int i = 1; i <= n; i++)
{
cin >> h;
for (int j = 1; j <= h; j++) // 修正循环条件
{
cin >> b;
a[b]++;
}
}
for (int i = 1; i <= m; i++)
{
if (a[i] == n) // 修正判断条件
{
num++;
}
}
cout << num << endl;
return 0;
}
总结:
通过仔细分析代码,我们找到了原始代码中的三个错误,并提供了修改后的正确代码。在编写代码时,务必注意数组大小、循环次数以及条件判断等细节,以确保代码的正确性。
原文地址: https://www.cveoy.top/t/topic/Rvo 著作权归作者所有。请勿转载和采集!