【PTA】猜数字
L1-056 猜数字 (20分)
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。
输入格式:
输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。
输出格式:
在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。
输入样例:
7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62
输出样例:
22 Amy
首先考虑到的是结构体Player来存储参加该游戏(猜数字)的玩家。
然后呢,这些玩家有姓名用string字符串类型存储,还有进行游戏的数字100以内用整型int存储。
获胜条件是接近平均数的一半,一开始我想的是四舍五入和小数上的问题,本来是想之后改进。
在看到输入样例和输出样例,22 Amy的时候,用计算器算了一下,原本是小数的22变成了整数22。
所以一直就用整型运算。
首先是结构体
typedef struct player
{
int guess;
string name;
int num;
}Player;
然后是num是玩家猜的数与平均数差的绝对值,其值用abs()函数在自带的cmath库。
源代码是:
#include <iostream> #include <cmath> using namespace std; typedef struct player//定义结构体Player { int guess; //玩家进行猜数的数字 string name; //玩家姓名 int num; //玩家猜的数字与平均数的一半差的绝对值 }Player; int main() { int n;//玩家数量 cin >> n; int sum=0;//猜数之和 int average;//猜数平均数的一半 Player player[10000]; for (int i = 0; i < n; i++) { cin >> player[i].name; cin >> player[i].guess; sum += player[i].guess; }//录入信息 average = sum / (2*n); for (int i = 0; i < n; i++) { player[i].num = abs(average - player[i].guess);//计算num } int min = 0; for (int i = 0; i < n; i++) { if (player[i].num < player[min].num) min = i;//求最小的num玩家下标,标记为min } cout << average << " " << player[min].name;//输出 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通