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>
#include<cmath>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF&&n){
int a[101];
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[x],a[0]);
printf("%d",a[0]);
for(int i=1;i<n;i++){
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}

思路:

这里我们使用了swap()函数来交换元素,降低时间复杂度;

swap()函数请参考:algorithm头文件下的常用函数之max()、min()、abs()、swap()、reverse()、next_permutation()、fill()

运行结果:

HDU - 2016  数据的交换输出_#include