1 条题解
-
0
自动搬运
来自洛谷,原作者为

loushujia
Where there is a well,there is way.搬运于
2025-08-24 21:15:18,当前版本为作者最后更新于2023-08-25 07:26:48,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
B3827题解
发现 dalao 都是用结构体和
sort写的,那我发一篇不用结构体和
sort的题解,话不多说,进入正题。
主要思路
在入门时,老师教了一种叫“打擂台”的方法来比较大小,就是一个叫 的变量来存最大值,初值为 0,然后挨个比较,只要它比 大,把它的值赋给 ,变成新的擂主。最后, 就是最大值。
这道题的思路与“打擂台”基本相同,干脆想成帮派竞争当家的。就是要有两个 和两个存储序号的,是大当家存储第一大的平均数, 二当家是存储第二大的平均数,挑战者先与 比较,比不过再与 比较。
既然思路搞明白了,那就上代码!
#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。
- 1
信息
- ID
- 8838
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者