初莫M 发表于 2023-11-22 17:24:50

为什么有些数据的结果错误

题目描述
一个班有n
个学生(n≤40
),每个学生有4门课,设计函数计算总平均分以及查找有两门以上(包括两门)成绩在85分以上的学生,并输出满足条件的学生。

输入描述
第一行输入一个整数n
,表示有n
个学生;
接下来n
行,每行4个整数,表示该同学的四门功课的成绩。

输出描述
第一行输出一个实数,表示n
个学生所有功课的平均分,保留到小数点后1位;
接下来若干行,表示有2门功课在85分以上的学生成绩,成绩之间用空格分开。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a;
    cin>>n;
    double s=0;
    int i,j,t;
    int (*p)=a;
    for(i=0;i<n;i++)
    {   cin>>a>>a>>a>>a;
           s+=a+a+a+a;
    }
    printf("%.1lf\n",s/(4*n));
    for(i=0;i<n;i++)
    {
      int f1=0,f2=0;
      for(j=0;j<4;j++)
      {
            if(*(*(p+i)+j)>85) {f1=1;break;}
      }
      for(;j<4;j++)
      {
            if(*(*(p+i)+j)>85) {f2=1;break;}
      }
      if(f1&&f2) cout<<a<<' '<<a<<' '<<a<<' '<<a<<endl;
    }
}

isdkz 发表于 2023-11-22 17:25:02

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a;
    cin>>n;
    double s=0;
    int i,j,t;
    int (*p)=a;
    for(i=0;i<n;i++)
    {
      cin>>a[ i]>>a[ i]>>a[ i]>>a[ i];
      s+=a[ i]+a[ i]+a[ i]+a[ i];
    }
    printf("%.1lf\n",s/(4*n));
    for(i=0;i<n;i++)
    {
      int f1=0,f2=0;
      for(j=0;j<4;j++)
      {
            if(*(*(p+i)+j)>85) {f1=1;break;}
      }
      for(;j<4;j++)
      {
            if(*(*(p+i)+j)>85) {f2=1;break;}
      }
      if(f1&&f2) cout<<a[ i]<<' '<<a[ i]<<' '<<a[ i]<<' '<<a[ i]<<endl;
    }
}

这段代码存在两个问题。首先,对于每个学生,平均分的计算方式错误。其次,查找有两门以上成绩在85分以上的学生的逻辑有误。在第一个循环中,应该计算每个学生的总分,而不是累加所有学生的成绩。在第二个循环中,应该同时检查是否有两门成绩大于85分,而不是分开检查。

sfqxx 发表于 2023-12-14 17:24:06

你的代码中存在一处逻辑错误,在查找两门以上(包括两门)成绩在85分以上的学生时,对第一门成绩在85分以上的判断和第二门成绩在85分以上的判断独立进行,这样会导致重复判断相同的成绩,所以你需要修复这个错误。

在你的代码中,你首先使用 for 循环遍历四门功课的成绩,一旦发现一门成绩大于85,就将f1设为1,并跳出循环。然后接着遍历剩下的成绩,一旦发现一门成绩大于85,就将f2设为1,并跳出循环。但这种情况可能会重复计算同一门成绩,并且不能确保找到的是两门不同的成绩。

解决这个问题的方法是在for循环中使用一个计数器count,每当发现一门成绩大于85时,count就加1,然后在for循环结束后,检查count是否大于等于2,如果是,就输出这个学生的成绩。这样就能确保找到的是两门不同的成绩。

修正后的代码如下:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a;
    cin>>n;
    double s=0;
    int i,j;
    int (*p)=a;
    for(i=0;i<n;i++)
    {   
      cin>>a>>a>>a>>a;
      s+=a+a+a+a;
    }
    printf("%.1lf\n",s/(4*n));
    for(i=0;i<n;i++)
    {
      int count=0;
      for(j=0;j<4;j++)
      {
            if(*(*(p+i)+j)>85) count++;
      }
      if(count>=2) cout<<a<<' '<<a<<' '<<a<<' '<<a<<endl;
    }
    return 0;
}
页: [1]
查看完整版本: 为什么有些数据的结果错误