6.5 queue的常见用法详解

6.5 queue的常见用法详解

http://codeup.hustoj.com/contest.php?cid=100000600

A C语言-数字交换

image-20200801180500941

题目解析

这道题就需要注意一点⚠️

有的数字可能要交换两次:如 9 3 4 5 6 2 2 2 2 7

最小数为2,所以若先把最小的和第一个数交换,即2和9交换,则2 3 4 5 6 9 2 2 2 7

最大数位9,把最大的和最后一个数交换,即9和7交换,则2 3 4 5 6 7 2 2 2 9

则9交换了两次

所以每交换一次需要重新计算最大值/最小值;

若按照错误的代码来,直接一次记录最大最小值9和2的序号为0、5,然后最小数序号5和第一个数换,为2 3 4 5 6 9 2 2 2 7,最大数序号0和最后一个数换,为7 3 4 5 6 9 2 2 2 2,就不对了 🤦‍♀️

错误代码

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
int a[10];

void input() {
    for (int i = 0; i < 10; i++) {
        cin >> a[i];
    }
}

void deal() {
    int max = a[0], min = a[0];
    int flag1 = 0, flag2 = 0;
    for (int i = 1; i < 10; i++) {
        if (a[i] > max) {
            max = a[i];
            flag1 = i;
        }
        if (a[i] < min) {
            min = a[i];
            flag2 = i;
        }
    }
    swap(a[0], a[flag2]);//最小的和第一个数换
    swap(a[9], a[flag1]); //最大的和最后一个数换
}

void output() {
    for (int i = 0; i < 10; i++) cout << a[i] << ' ';
    cout << endl;
}

int main() {
    input();
    deal();
    output();
    return 0;
}

正确代码

#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;
int a[10];

void input() {
    for (int i = 0; i < 10; i++) {
        cin >> a[i];
    }
}

void deal() {
    int max = a[0], min = a[0];
    int flag1 = 0, flag2 = 0;
    for (int i = 1; i < 10; i++) {
        if (a[i] < min) {
            min = a[i];
            flag2 = i;
        }
    }
    swap(a[0], a[flag2]);//最小的和第一个数换
    for (int i = 1; i < 10; i++) {
        if (a[i] > max) {
            max = a[i];
            flag1 = i;
        }
    }
    swap(a[9], a[flag1]); //最大的和最后一个数换
}

void output() {
    for (int i = 0; i < 10; i++) cout << a[i] << ' ';
    cout << endl;
}

int main() {
    input();
    deal();
    output();
    return 0;
}
posted @ 2021-03-16 02:56  Joey-Wang  阅读(137)  评论(0)    收藏  举报