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;
}
本文来自博客园,作者:yucheng0630,转载请注明原文链接:https://www.cnblogs.com/yucheng0630/p/18320699

浙公网安备 33010602011771号