正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 提高 2012 第一轮真题 › 第 23 题

NOIP 提高 2012 第一轮 第 23 题:双向一趟冒泡后求平均数

阅读程序 · 排序算法 · 答案 41

题目

```
#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号