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

AK CSP › NOIP 普及 2010 第一轮真题 › 第 23 题

NOIP 普及 2010 第一轮 第 23 题:将四个整数按升序排列

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

题目

```
#include <iostream>
using namespace std;

void swap(int & a, int & b)
{
    int t;
    t = a;
    a = b;
    b = t;
}

int main()
{
    int a1, a2, a3, x;
        
    cin>>a1>>a2>>a3;
    if (a1 > a2)
        swap(a1, a2);
    if (a2 > a3)
        swap(a2, a3);
    if (a1 > a2)
        swap(a1, a2);
    
    cin>>x;
    if (x < a2)
        if (x < a1)
            cout<<x<<' '<<a1<<' '<<a2<<' '<<a3<<endl;
        else
            cout<<a1<<' '<<x<<' '<<a2<<' '<<a3<<endl;
    else
        if (x < a3)
            cout<<a1<<' '<<a2<<' '<<x<<' '<<a3<<endl;
        else
            cout<<a1<<' '<<a2<<' '<<a3<<' '<<x<<endl;    
    return 0;
}
```
输入:  
91 2 20  
77

本小题

阅读程序写结果:

答案

2207791

题解

考点定位

本题考「排序插入模拟」,对应大纲 4.2.1 程序模拟(难度【2】)。

解题过程

前三行 if 把 a1,a2,a3 排成非降序:91,2,20 → 交换后 a1=2,a2=20,a3=91。再读 x=77,x≥a2(20) 且 x<a3(91) → 走第三个分支:

输出 2 20 77 91。

(与标准答案比对:官方答案数字不同系输入/答案口径差异——按程序逻辑,输出 a1 a2 x a3 = 2 20 77 91。)

易错提醒

① 三个 if 是「三元素排序」的经典写法(冒泡两遍半);② x 的插入分支按 x 与 a1、a2、a3 依次比较,走且只走一条。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号