OJ地址:https://vjudge.net/problem/HDU-2016
輸入n(n<100)個數,找出其中最小的數,將它與最前面的數交換後輸出這些數。
Input
輸入數據有多組,每組佔一行,每行的開始是一個整數n,表示這個測試實例的數值的個數,跟着就是n個整數。n=0表示輸入的結束,不做處理。
Output
對於每組輸入數據,輸出交換後的數列,每組輸出佔一行。
Sample Input
4 2 1 3 4
5 5 4 3 2 1
0
Sample Output
1 2 3 4
1 4 3 2 5
程序代碼:
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n){
int a[100];
int min = INT_MAX;
int x;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]<min) {
min=a[i];
x=i;
}
}
swap(a[0],a[x]);
printf("%d",a[0]);
for(int i=1;i<n;i++){
printf(" %d",a[i]);
}
printf("\n");
}
}
思路:
這裏我們使用了swap()函數來交換元素,降低時間複雜度;
swap()函數請參考:algorithm頭文件下的常用函數之max()、min()、abs()、swap()、reverse()、next_permutation()、fill()