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;
}

浙公网安备 33010602011771号