简单模拟

题意:
公园有 x 条长凳。第 i 个长凳上坐着 a_i 个人。这时候又有 y 个人将来到公园,他们将选择坐在某些公园中的长凳上,那么当这 y 个人坐下后,记k = 所有椅子上的人数的最大值,那么k可能的最大值mx和最小值mn分别是多少。
输入:
第一行包含一个整数 x (1 <= x <= 100) 表示公园中长椅的数目;
第二行包含一个整数 y (1 <= y <= 1000) 表示有 y 个人来到公园;
接下来 x 个整数 a_i (1<=a_i<=100),表示初始时公园长椅上坐着的人数。
输出:
输出 mn 和 mx
输入样例:
3
7
1
6
1
输出样例:
6 13
解题思路:
很简答的模拟题,甚至不怎么需要模拟,主要是需要思考怎么计算mn和mx。mx的计算非常简单,找到所有椅子人数的最大值,然后加上y以后的人数就是mx。而至于mn,我的思路是每一次给当前的最小值都加一,然后y减去加上的总人数,直到y小于等于0,此时的所有元素的最大值即为mn。
参考代码:

#include <iostream>
using namespace std;
int a[105];
int x,y;
int main(int argc, const char * argv[]) {
    cin>>x>>y;
    int max_num=0;
    int min_num=1e9;
    int mn=0,mx;
    for (int i=1; i<=x; i++) {
        cin>>a[i];
        if(a[i]>max_num)max_num=a[i];
        if(a[i]<min_num)min_num=a[i];
    }
    mx=max_num+y;
    while (y>0) {
        for (int i=1; i<=x; i++) {
            if(a[i]==min_num){
                a[i]++;
                y--;  
            }
        }
        min_num++;
    }
    for (int i=1; i<=x; i++) {
        if(a[i]>mn)mn=a[i];
    }
    cout<<mn<<" "<<mx<<endl;
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值