6.5 queue的常见用法详解
6.5 queue的常见用法详解
http://codeup.hustoj.com/contest.php?cid=100000600
A C语言-数字交换

题目解析
这道题就需要注意一点⚠️
有的数字可能要交换两次:如 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;
}
本文作者:Joey-Wang
本文链接:https://www.cnblogs.com/joey-wang/p/14541176.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步