在结构体之中计算总成绩 与在main 中scanf后计算总成绩为什么会区别这么大
查看原帖
在结构体之中计算总成绩 与在main 中scanf后计算总成绩为什么会区别这么大
642788
watingblue楼主2022/1/14 13:35

#以下为第一次尝试代码 , 仅过第一个测试点 经过修改后的版本在此之后

#include<cstdio>
#include<math.h>
using namespace std;
#define N 100000
struct student{
	int c;
	int m;
	int e;
	int total=c+m+e;//请注意这一行
	
}stu;
int main(){
	struct student stu[N]; 
	int n;
	scanf("%d",&n);
	int i,j;
	int cnt=0;
	
	for(i=1;i<=n;i++){
		scanf("%d %d %d",&stu[i].c,&stu[i].m,&stu[i].e);
	}
	for(i=1;i<n;i++){
		for(j=i+1;j<=n;j++){
			if(abs(stu[i].c-stu[j].c)<=5){
				if(abs(stu[i].m-stu[j].m)<=5){
					if(abs(stu[i].e-stu[j].e)<=5){
						if(abs(stu[i].total-stu[j].total)<=10){
							cnt++;
						}
					}
				}
			}
		}
	}
	printf("%d",cnt);
	
	return 0;
}

可见 将计算部分由结构体内部放到了scanf之后, 这版代码可以ac。

#include<cstdio>
#include<math.h>
using namespace std;
#define N 100000
struct student{
	int c;
	int m;
	int e;
	int total;//删除了计算
	
}stu;
int main(){
	struct student stu[N]; 
	int n;
	scanf("%d",&n);
	int i,j;
	int cnt=0;
	
	for(i=1;i<=n;i++){
		scanf("%d %d %d",&stu[i].c,&stu[i].m,&stu[i].e);
		stu[i].total= stu[i].c + stu[i].m + stu[i].e ;//将计算过程放在了这里
	}
	for(i=1;i<n;i++){
		for(j=i+1;j<=n;j++){
			if(abs(stu[i].c-stu[j].c)<=5){
				if(abs(stu[i].m-stu[j].m)<=5){
					if(abs(stu[i].e-stu[j].e)<=5){
						if(abs(stu[i].total-stu[j].total)<=10){
							cnt++;
						}
					}
				}
			}
		}
	}
	printf("%d",cnt);
	
	return 0;
}
2022/1/14 13:35
加载中...