ACM——p2016数据的交换输出(选择排序,选择最小数与第一个交换)

来源:互联网 发布:空气炮升级数据 编辑:程序博客网 时间:2024/05/22 17:24
Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
 

Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
 

Output
对于每组输入数据,输出交换后的数列,每组输出占一行。
 

Sample Input
4 2 1 3 45 5 4 3 2 10
 

Sample Output
1 2 3 41 4 3 2 5

 

分析:题目的要求:找到最小的数和第一个数进行交换,然后依次输出,所以第一想到的方法是:选择排序法。

需要用到的有数组,min,位置数:k

用数组a[]来接收输入的数据

用min记住第一个输出的数a[0],依次和接下来的数进行比较,找到最小的数,如果有,用k记住他的位置,如果没有,k=0也就是a[0]

int min=a[0];

所以用到for(int i=0;i<n;i++){

    if(min<a[i]){

        min=a[i];

         k=i;

     }

}

然后判断 k==0?

如果不等于

就将a[0]和a[k]进行交换,a[k]就是最小的数。

代码如下:

import java.util.*;
class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
if(n==0){
break;
}
int a[] = new int[n];
a[0] = sc.nextInt();
int min = a[0];
int k = 0;
for (int i = 1; i < n; i++) {
a[i] = sc.nextInt();
if (min > a[i]) {
min = a[i];
k = i;
}
}
if (k != 0) {
int s = a[0];
a[0] = a[k];
a[k] = s;
}
for(int i=0;i<n-1;i++){
           System.out.print(a[i]+" ");
       }
System.out.println(a[n-1]);
}
}
}


0 0