老师给出了一组数,要求小蓝对这组数进行调整,调整的规则如下: a.第1次,从这组数中选出一个最小的数,把它调整为和第二小的数一样大; b.第2次,再从这组数中选出一个最大的数,把它调整为和第二大的数一样大; c.重复执行a、b步骤; d.当这组数中所包含的不同的数少于3个时,结束调整。 现在给定了一组数,请帮小蓝编写程序计算出总共的调整次数,以及调整结束时这组数中的最小数和最大数。 例1: 当这组数是2 2 2 2时,这组数中所包含的不同的数少于3个(只有2这一种数),无需调整,最后输出: 0 2 2 例2: 当这组数是1 3 4 2时,调整过程如下: 1.先将这组数中最小的数1,改成2,这组数变为:2 3 4 2 2.再将这组数中最大的数4,改成3,这组数变为:2 3 3 2 这时,这组数中只包含2、3两个数了,满足规则4,调整结束,总共调整了2次,故最后输出: 2 2 3。写一份全队的c++代码
时间: 2024-03-03 14:50:52 浏览: 195
以下是C++代码实现:
```c++
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
vector<int> nums;
int n;
while (cin >> n) {
nums.push_back(n);
}
int cnt = 0;
while (true) {
sort(nums.begin(), nums.end());
if (nums.size() < 3) {
break;
}
int min_num = nums[0];
int second_min_num = nums[1];
nums[0] = second_min_num;
int max_num = nums[nums.size() - 1];
int second_max_num = nums[nums.size() - 2];
nums[nums.size() - 1] = second_max_num;
cnt += 2;
nums.erase(find(nums.begin(), nums.end(), min_num));
nums.erase(find(nums.begin(), nums.end(), max_num));
}
cout << cnt << " " << nums[0] << " " << nums[nums.size() - 1] << endl;
return 0;
}
```
代码思路:
1. 读入数据,并将其存入vector中;
2. 循环执行以下步骤,直到符合规则4:
a. 将vector中最小的数修改为第二小的数;
b. 将vector中最大的数修改为第二大的数;
c. 计数器cnt加2;
d. 从vector中删除数值等于最小值和最大值的元素;
3. 输出调整次数cnt,以及vector中的最小值和最大值。
阅读全文