题意:
公园有 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;
}