今年是校庆60周年,学校少先队大队部举行了庆祝活动,其中有一项活动是摘彩球。大队辅导员在学校礼堂里高低不一地挂了N个彩球,请M位少先队员到礼堂里摘彩球。辅导员说:你们每人最多可以摘两个彩球,而且只许站着伸手摘,不允许借助其它工具,摘下的彩球归大家共有。由于各少先队员的身高参差不齐,怎样才能使他们摘的彩球总数最多呢?请你计算少先队员们最多能摘到多少个彩球(不能用sort)(不能用函数)
时间: 2024-03-30 16:38:33 浏览: 150
我们可以用一个双重循环来实现,外层循环枚举第一个摘彩球的少先队员,内层循环枚举第二个摘彩球的少先队员,然后计算这两个少先队员摘到的彩球总数,并用一个变量maxVal来记录当前最大的摘彩球总数。最后输出maxVal即可。
以下是代码实现:
```cpp
#include <iostream>
using namespace std;
int main() {
int N, M;
cout << "请输入彩球数量N和少先队员数量M:";
cin >> N >> M;
int maxVal = 0; //记录最大摘彩球总数
for (int i = 0; i <= M; i++) { //外层循环枚举第一个摘彩球的少先队员
for (int j = i; j <= M; j++) { //内层循环枚举第二个摘彩球的少先队员
int val = 0; //记录当前两个少先队员摘到的彩球总数
if (i != j) { //两个少先队员不是同一个人
int h1 = i * 10 + 120; //第一个少先队员的身高
int h2 = j * 10 + 120; //第二个少先队员的身高
if (h1 + h2 <= N) val = 2; //两个少先队员身高之和小于等于N,可以摘2个彩球
else if (h1 <= N || h2 <= N) val = 1; //两个少先队员身高之和大于N,但有一个少先队员可以摘1个彩球
}
if (val > maxVal) maxVal = val; //更新最大摘彩球总数
}
}
cout << "少先队员最多能摘到" << maxVal << "个彩球" << endl;
return 0;
}
```
在这个程序中,我们首先输入彩球数量N和少先队员数量M。然后,我们使用两个循环枚举所有可能的两个少先队员的组合,并计算他们能够摘到的彩球总数。根据题目要求,每个少先队员最多能摘两个彩球,因此我们可以使用身高来判断一个少先队员是否能够摘到彩球。最后,我们更新最大摘彩球总数maxVal,并输出结果。