PTA刷题——猜数字

7-46 猜数字 (20 分)

一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。

输入格式:

输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。

输出格式:

在一行中顺序输出:大家平均数的一半(只输出整数部分)、赢家的名字,其间以空格分隔。题目保证赢家是唯一的。

输入样例:

7
Bob 35
Amy 28
James 98
Alice 11
Jack 45
Smith 33
Chris 62

输出样例:

22 Amy

题目分析

这一题不属于水题,至少我是这么看的,我的思路很简单:

用猜数做下标,用名字做数组中的数据,遍历数组,找出最接近平均值的一半的下标。输出平均值的一半,和对应下标存的名字即可。

题目保证赢家唯一,所以,只有一个人猜到的最终结果。即使出现多个人猜一个数,对应下标存的名字会被覆盖也没关系,反正他们都不是最终答案

最后给出代码:

#include<bits/stdc++.h>
using namespace std;
int main() {
    int n,b,sum=0,x=1000,y;
    string name,a[105];
    int c;
    cin>>n;
    for(int i=0; i<n; i++) {
        cin>>name>>b;
        a[b]=name;
        sum+=b;
    }
    double ave=0.5*sum/n;
    for(int i=0; i<=100; i++)
        if(a[i] !=""&&abs(ave-i)<x) {
            y=i;
            x=abs(ave-i);
        }
    c=ave;
    cout<<c<<" "<<a[y];
    return 0;
}

而网上一些人都是这样写的

#include<bits/stdc++.h>
using namespace std;
struct Person {
    string name;
    int val;
} p[10001];

int n, minId;;
double sum, mind = 999999999;
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        cin>>p[i].name>>p[i].val;
        sum += p[i].val;
    }
    double ave = sum / n / 2;
    for (int i = 0; i < n; i++) {
        if (abs(p[i].val - ave) < mind) {
            mind = abs(p[i].val - ave);
            minId = i;
        }
    }
    printf("%d %s\n", (int)ave, p[minId].name.c_str());
    return 0;
}

原文地址:https://www.cnblogs.com/miraitowa/p/10059756.html

时间: 2024-10-03 05:40:32

PTA刷题——猜数字的相关文章

PTA 刷题与Z老师的头发

刷题与Z老师的头发 (10 分) 在Pintia上,每天Z老师出题.小盆友们刷题.Z老师的头发遵从以下规律: 1.每天生长出60根头发: 2.每出一道题,减少20根头发: 3.每天结束时统计累积做题情况: (1)若出的题全部被做出来,则Z老师产生“没题焦虑”,减少30根头发: (2)若小盆友做出来的题少于50%,则Z老师产生“学生不用功焦虑”,减少70根头发. 现给定连续N天的出题.刷题情况,请计算Z老师头发的变化情况. 输入格式: 第一行输入一个正整数N (N<20): 接下来N行,每行输入两

PTA刷题——龟兔赛跑

7-4 龟兔赛跑 (20 分) 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息.乌龟每分钟可以前进3米,兔子每分钟前进9米:兔子嫌乌龟跑得慢, 觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟: 而乌龟非常努力,一直跑,不休息.假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟). 输出格式: 在一行中输出比赛的结果:乌龟赢输出@@,兔

PTA刷题

L1-002:写得太糟了L1-006:不难就是没思路,测试点4是6  2*3L1-008:测试点之一,个数为5.10..个时,多换了个行L1-009:没过,测试点3L1-020:没过,超时La-033:真坑,3000岁以上也要算,3000 4L1-048:没过,超时L1-049:太烂了,下次再写L1-050:26进制L1-064:坑,测试点:can I can => can you can.   can you you=>I can you.  IIIII=>IIIII   一串空格不会

OJ刷题---猜算式

题目要求: 输入代码: #include<iostream> using namespace std; void Calc(); int main() { Calc(); return 0; } void Calc() //解题函数 { int count=0,m,n,x,y; for(int a=1; a<10; a++) for(int b=1; b<10; b++) for(int c=1; c<10; c++) for(int d=1; d<10; d++) f

PTA刷题——出租车计价

7-2 出租车计价 (15 分) 本题要求根据某城市普通出租车收费标准编写程序进行车费计算.具体标准如下: 起步里程为3公里,起步费10元: 超起步里程后10公里内,每公里2元: 超过10公里以上的部分加收50%的回空补贴费,即每公里3元: 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费). 输入格式: 输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔. 输出格式: 在一行中输出乘客应支付的车费(单位为元

PTA刷题——到底是不是太胖了

7-7 到底是不是太胖了 (10 分) 据说一个人的标准体重应该是其身高(单位:厘米)减去100.再乘以0.9所得到的公斤数.真实体重与标准体重误差在10%以内都是完美身材 (即 | 真实体重 ? 标准体重 | < 标准体重×10%).已知市斤是公斤的两倍.现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了. 输入格式: 输入第一行给出一个正整数N(≤ 20).随后N行,每行给出两个整数,分别是一个人的身高H(120 < H < 200:单位:厘米) 和真实体重W(50 <

LeetCode刷题之一:寻找只出现一次的数字

投简历的时候看到了个刷题网站,http://www.nowcoder.com/527604,就做了一套题,现记录下来. 题目为: Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it withou

HDU 2178.猜数字【分析能力练习】【读题能力联系】【8月10】

猜数字 Problem Description A有1数m,B来猜.B每猜一次,A就说"太大","太小"或"对了" . 问B猜n次可以猜到的最大数. Input 第1行是整数T,表示有T组数据,下面有T行 每行一个整数n (1 ≤ n ≤ 30) Output 猜n次可以猜到的最大数 Sample Input 2 1 3 Sample Output 1 7 哎呀妈呀,这题什么意思啊!-----第一感觉 仔细理解理解:比如数据中的3次可以最大猜到7

刷题之路(八)求字符串中的符合要求的数字

简介:String to Integer (atoi)—实现将字符串转换为整数的atoi 问题详解:给定一个字符串str,在该函数中首先丢弃所需数量的空白字符,直到找到第一个非空白字符’ ',然后,从该字符开始,采用可选的初始加号或减号,后跟尽可能多的数字,并将它们转换为数值. 其他非数字字符串可以包含在形成整数之后的其他字符,这些字符将被忽略,如果str中的第一个非空白字符序列不是有效的整数,或者由于str是空的或者只包含空格字符而不存在这样的序列,则返回零值 超出-2^31 ~ 2^31-1