题解
B3827题解
题目
发现 dalao 都是用结构体和 sort 写的,
那我发一篇不用结构体和 sort 的题解,
话不多说,进入正题。
主要思路
在入门时,老师教了一种叫“打擂台”的方法来比较大小,就是一个叫
这道题的思路与“打擂台”基本相同,干脆想成帮派竞争当家的。就是要有两个
既然思路搞明白了,那就上代码!
#include<cstdio>//scanf和printf的头文件
int n,k,x1,x2,a;//x1和x2存题的序号
double mx1,mx2,p;//mx1,mx2用来比较题目的必要性,p用来求平均值
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
p=0.0;//多测不清空,爆零两行泪 qaq
for(int j=1;j<=k;j++)
{
scanf("%d",&a);
p+=a;//求和
}
p/=k;//求平均值
//重点来了!!!
if(mx1<p)//如果这道的平均值比 大当家(原来的最大值)大
mx1=p,x1=i;//成为大当家!
else if(mx2<p)//打不过大当家,去挑战二当家
mx2=p,x2=i;//挑战成功!
}
printf("%d\n%d",x1,x2);//输出
return 0;//华丽的地结束
}
输入样例:
3 2
10 20
15 25
20 30
输出:
3
0
喜提 0 分。
why?
我辛辛苦苦调了 3 分钟,发现如果挑战大当家成功的话,原来的大当家理当成为二当家,我们却直接把他踢出了竞争,成为了小弟。
既然知道怎么错的了,那就上 AC 代码。
#include<cstdio>//scanf和printf的头文件
int n,k,x1,x2,a;//x1和x2存题的序号
double mx1,mx2,p;//mx1,mx2用来比较题目的必要性,p用来求平均值
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
p=0.0;//多测不清空,爆零两行泪 qaq
for(int j=1;j<=k;j++)
{
scanf("%d",&a);
p+=a;//求和
}
p/=k;//求平均值
//重点来了!!!
if(mx1<p)//如果这道的平均值比 大当家(原来的最大值)厉害(大)
{
mx2=mx1,x2=x1;//大当家惜败,成为二当家
mx1=p,x1=i;//成为大当家!
}
else if(mx2<p)//打不过大当家,去挑战二当家
mx2=p,x2=i;//挑战成功!
}
printf("%d\n%d",x1,x2);//输出
return 0;//华丽的地结束
}
样例输入 # 1:
3 2
10 20
15 25
20 30
输出:
3
2
样例输入 # 2:
3 2
10 20
5 25
1 2
输出:
1
2
喜提 AC。