L1-056 猜数字

L1-056 猜数字 - 团体程序设计天梯赛-练习集 (pintia.cn)

题解

这道题要求:一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。现在需要编写程序来计算,其中需要存入玩家的名字(字符串)和玩家猜的正整数。

需要注意的是,这道题需要存玩家的名字,最后也需要输出玩家的名字。在这里我用了两种方法来解决这道题。第一种方法是简单易懂的方法,第二种用到了一些基本的函数,使得代码量更少。

代码

解法一:使用常规变量来存入玩家的名字和猜的数字,在比对每个玩家与平均数的一半的差值时也是使用的if判断来处理。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    int num[10001];
    string s[10001];
    cin>>n;
    int sum=0;
    for(int i=0;i<n;i++){
        cin>>s[i]>>num[i];
        sum+=num[i];
    }
    int x=(sum/n)/2;
    int res=101;
    string ress;
    for(int i=0;i<n;i++){
        if(num[i]-x>=0){
            if((num[i]-x)<res){
                res=num[i]-x;
                ress=s[i];
            }
        }else{
            if((x-num[i])<res){
                res=x-num[i];
                ress=s[i];
            }
        }
    }
    int y=sum/n/2;
    cout<<y<<" "<<ress;
    return 0;
}

解法二:用容器来存玩家的名字和猜的数字,在比对每个玩家与平均数的一半的差值时用了绝对值函数abs(),代码更加简洁。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    vector<string> name;
    vector<int> num;
    int sum=0;
    for(int i=0;i<n;i++){
        string s;
        int sNum;
        cin>>s>>sNum;
        sum+=sNum;
        name.push_back(s);
        num.push_back(sNum);
    }
    int avg=sum/n/2;
    int MinNum=101;
    string resName;
    for(int i=0;i<n;i++){
        if(abs(num[i]-avg)<MinNum){
            MinNum=abs(num[i]-avg);
            resName=name[i];
        }
    }
    cout<<sum/n/2<<" "<<resName;
    return 0;
}
相关推荐
BLSxiaopanlaile1 分钟前
关于子集和问题的几种解法
数据结构·算法·剪枝·回溯·分解
狐5710 分钟前
2026-01-17-LeetCode刷题笔记-3047-求交集区域内的最大正方形面积
笔记·算法·leetcode
Yzzz-F13 分钟前
P3509 [POI 2010] ZAB-Frog[单调队列+倍增快速幂思想]
算法
代码无bug抓狂人16 分钟前
C语言之5位黑洞数
c语言·算法
CodeByV20 分钟前
【算法题】BFS:FloodFill
算法
long31624 分钟前
弗洛伊德·沃肖算法 Floyd Warshall Algorithm
java·后端·算法·spring·springboot·图论
有一个好名字25 分钟前
力扣-咒语和药水的成功对数
java·算法·leetcode
Loo国昌30 分钟前
【LangChain1.0】第一篇:基础认知
后端·python·算法·语言模型·prompt
H Corey40 分钟前
Java--面向对象之继承与多态
java·开发语言·windows·学习·算法·intellij-idea
永远都不秃头的程序员(互关)1 小时前
【K-Means深度探索(三)】告别“初始陷阱”:K-Means++优化质心初始化全解析!
算法·机器学习·kmeans