怎么说,这个在《算法笔记》里面分别出现在6.5 7.2小节后面的题目里。
但是完全没必要用6.5节和7.2节讲的队列(queue)来做鸭…
这里直接用数组暴力做完。思路挺简单不赘述,直接上代码。
#include<bits/stdc++.h>
using namespace std;
int main(){
int num[10];
for(int i=0;i<10;i++)
scanf("%d",&num[i]);
int min=0,max=0;
for(int i=1;i<10;i++){
if(num[min] > num[i]){
min = i;
}
}
swap(num[0],num[min]);
for(int i=1;i<10;i++){
if(num[max] < num[i]){
max = i;
}
}
swap(num[max],num[9]);
for(int i= 0;i<10;i++)
printf("%d ",num[i]);
}
注意的点:
找max和min不能放在一个for循环里面,不然会出问题。
出问题的样例:10 9 8 7 6 5 4 3 2 1。
不能放在一个for里面不是说max min找不对,而是因为两个swap会叠在一起,如果按照样例分析,换两次又回去了。