正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2012 第一轮真题 › 第 23 题
NOIP 提高 2012 第一轮 第 23 题:双向一趟冒泡后求平均数
题目
```
#include <iostream>
using namespace std;
int n, i, temp, sum, a[100];
int main() {
cin >> n;
for (i = 1; i <= n; i++)
cin >> a[i];
for (i = 1; i <= n - 1; i++)
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
for (i = n; i >= 2; i--)
if (a[i] < a[i - 1]) {
temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
}
sum = 0;
for (i = 2; i <= n - 1; i++)
sum + = a[i];
cout << sum / (n - 2) << endl;
return 0;
}
```
输入:
8
40 70 50 70 20 40 10 30
输出:_______本小题
请写出程序的输出结果。
答案
41
题解
考点定位
本题考「双向冒泡模拟」,对应大纲 4.2.1 模拟(难度【3】)。
解题过程
输入 8 个数 [40,70,50,70,20,40,10,30]:
正向冒泡(大数右移)→ [40,50,70,20,40,10,30,70];反向冒泡(小数左移)→ [10,40,50,70,20,40,30,70]。求中间 a[2..7] 之和:40+50+70+20+40+30 = 250;250/(n−2) = 250/6 = 41(整数除法)。
答案:41。
易错提醒
① 两个循环分别是「一趟正向」与「一趟反向」(完整双向冒泡要多趟,这里只有各一趟);② 输出是整数除法取整。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号