2.2日测试总结

2.2日测试总结

T1 P5740 【深基7.例9】最厉害的学生

无错误,本体使用结构体排序。

AC代码:

#include<bits/stdc++.h>
using namespace std;
struct stu{
	string name;
	int yw;
	int sx;
	int yy;
	int zf;
	int id;
};
stu a[1005];
bool cmp(stu x,stu y){
	if(x.zf==y.zf){
		if(x.id>y.id){
			return 0;
		}else{
			return 1;
		}
	}else{
		if(x.zf>y.zf){
			return 1;
		}else{
			return 0;
		}
	}
}//排序函数cmp
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].name>>a[i].yw>>a[i].sx>>a[i].yy;
		a[i].zf=a[i].yw+a[i].sx+a[i].yy;
		a[i].id=i;
	}
	sort(a+1,a+n+1,cmp);
	cout<<a[1].name<<" "<<a[1].yw<<" "<<a[1].sx<<" "<<a[1].yy;
	return 0;
}

T2 P5742 【深基7.例11】评等级

无错误,使用结构体,用for循环判断第i个是不是Excellent。

AC代码:

#include<bits/stdc++.h>
using namespace std;
struct stu{
	int id;
	int xy;
	int sz;
	int zh;
	int zf;
};
stu a[1005];
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].id>>a[i].xy>>a[i].sz;
		a[i].zh=a[i].xy*0.7+a[i].sz*0.3;//计算综合成绩
		a[i].zf=a[i].xy+a[i].sz;//计算总分
	}
	for(int i=1;i<=n;i++){
		if(a[i].zf>140 and a[i].zh>=80){//判断是不是Excellent
			cout<<"Excellent"<<endl;
		}else{
			cout<<"Not excellent "<<endl;
		}
	}
	return 0;
}

T3 P5738 【深基7.例4】歌唱比赛

错误代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+7;
double a[maxn][maxn];
double s[maxn];
double b[maxn];
int main(){
	int n,m;
	int j;
	int maxx = 0;
	int minn = 11;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			cin>>a[i][j];
			
			if(a[i][j]>maxx){
				maxx=a[i][j];
			}
			if(a[i][j]<minn){
				minn=a[i][j];
			}
			s[i]=s[i]+a[i][j];
			
			
		}
		for(int o=1;o<=j;o++){
			if(a[i][o]==maxx){
				a[i][o]=0;
			}
			if(a[i][o]==minn){
				a[i][o]=0;
			}
		}
//		cout<<s[i];
		b[i]=s[i]/m;
	}
	cout<<fixed<<setprecision(2)<<b[1];
	return 0;
}

错误位置

1.

第十行和第十一行的:

int maxx = 0;
	int minn = 11;

应该改到第一个for循环里面:

改正后的代码:

for(int i=1;i<=n;i++){
		int maxx = 0;
		int minn = 11;
		for(j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]>maxx){
				maxx=a[i][j];
			}
			if(a[i][j]<minn){
                minn=a[i][j];
            }
            ......
        }

2.

第27行到第34行的:

for(int o=1;o<=j;o++){
			if(a[i][o]==maxx){
				a[i][o]=0;
			}
			if(a[i][o]==minn){
				a[i][o]=0;
			}
		}

应该为:

s[i]-=maxx;
		s[i]-=minn;

因为这里不是要等于0,而是要把max和min从s[i]中减去。

3.

第36行的:

b[i]=s[i]/m;

应该为:

b[i]=s[i]/(m-2)

因为是去掉了最高分和最低分,所以要m-2.

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3+7;
double a[maxn][maxn];
double s[maxn];
double b[maxn];
int main(){
	int n,m;
	int j;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int maxx = 0;
		int minn = 11;
		for(j=1;j<=m;j++){
			cin>>a[i][j];
			
			if(a[i][j]>maxx){
				maxx=a[i][j];
			}
			if(a[i][j]<minn){
				minn=a[i][j];
			}
			s[i]=s[i]+a[i][j];
			
			
		}
		s[i]-=maxx;
		s[i]-=minn; 
//		cout<<s[i];
		b[i]=s[i]/(m-2);
	}
	sort(b+1,b+1+n,greater<double>());
	cout<<fixed<<setprecision(2)<<b[1];
	return 0;
}

T4 P1093 [NOIP2007 普及组] 奖学金

错误代码:

#include<bits/stdc++.h>
using namespace std;
struct stu{
	int id;
	int yw;
	int sx;
	int yy;
	int zf;
};
const int maxn = 305;
stu a[maxn];
bool cmp(stu x,stu y){
	if(x.zf==y.zf){
		if(x.yw==y.yw){
			if(x.id>y.id){
				return 0;
			}else{
				return 1;
			}
		}
	}else{
		if(x.zf>y.zf){
			return 1;
		}else{
			return 0;
		}
	}
}
int main(){
	int n;
	cin>>n;
	
	for(int i=1;i<=n;i++){
		cin>>a[i].yw>>a[i].sx>>a[i].yy;
		a[i].id=i;
		a[i].zf=a[i].yw+a[i].sx+a[i].yy;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=5;i++){
		cout<<a[i].id<<" "<<a[i].zf<<endl;
	}
	return 0;
}

错因:

cmp函数判断时,没有注意到题目中“如果两个同学总分相同,再按语文成绩从高到低排序”这句话。错误位置:

if(x.zf==y.zf){
		if(x.yw==y.yw){
			if(x.id>y.id){
				return 0;
			}else{
				return 1;
			}
		}
	}

正确代码为:

if(x.zf==y.zf){
		if(x.yw==y.yw){
			if(x.id>y.id){
				return 0;
			}else{
				return 1;
			}
		}else{
			if(x.yw>y.yw){
				return 1;
			}else{
				return 0;
			}
		}
    }

更正后AC代码为:

#include<bits/stdc++.h>
using namespace std;
struct stu{
	int id;
	int yw;
	int sx;
	int yy;
	int zf;
};
const int maxn = 305;
stu a[maxn];
bool cmp(stu x,stu y){
	if(x.zf==y.zf){
		if(x.yw==y.yw){
			if(x.id>y.id){
				return 0;
			}else{
				return 1;
			}
		}else{
			if(x.yw>y.yw){
				return 1;
			}else{
				return 0;
			}
		}
	}else{
		if(x.zf>y.zf){
			return 1;
		}else{
			return 0;
		}
	}
}
int main(){
	int n;
	cin>>n;
	
	for(int i=1;i<=n;i++){
		cin>>a[i].yw>>a[i].sx>>a[i].yy;
		a[i].id=i;
		a[i].zf=a[i].yw+a[i].sx+a[i].yy;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=5;i++){
		cout<<a[i].id<<" "<<a[i].zf<<endl;
	}
	return 0;
}
posted @ 2024-02-02 21:47  yucheng0630  阅读(17)  评论(0)    收藏  举报  来源