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 @   yucheng0630  阅读(2)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起