题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2016
题目:
数据的交换输出
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description
输入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
考察点:常规水题(具体来说是)
找一列数中的最小值并标记其位置 && 两数交换位置
题目大意:输入n(n<100)个数,找出其中最小的数,将其与最前面的数交换位置,然后这些数
题目解析:
我的处理是将输入的数都存入数组str中;
然后用循环比较的方式找出最小值,
之后再遍历所有数,找出最小值所在的位置i,标记之(k=i;)。
之后用两数交换的经典做法将str[0]与str[k]交换一下位置,
最后依次输出数组str中所有的数即可。
AC代码:
#include <stdio.h>
#define INF 0x3f3f3f
int str[1010];
int main()
{
int n;
while(scanf("%d",&n) != EOF, n){
for(int i = 0; i < n; i++){
scanf("%d", &str[i]); //将输入的数据存入数组
}
int min = INF;
for(int i = 0; i < n; i++){
if(min > str[i]) // 找出最小值
min = str[i];
}
int k;
for(int i = 0; i < n; i++){
if(str[i] == min){ // 标记最小值位置
k = i;
break;
}
}
int t = str[0]; // 交换过程
str[0] = str[k];
str[k] = t;
for(int i = 0; i < n; i++){ //依次输出经处理后的数组元素(须注意格式问题)
if(i != n-1)
printf("%d ",str[i]);
else printf("%d",str[i]);
}
printf("\n");
}
return 0;
}