华为OJ平台——输出最小的k个数-飞外

原型:

bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint uiK, int * pOutputArray);

输入参数:

unsignedint uiInputNum //输入整数个数

int * pInputArray //输入整数数组

unsignedint uiK //需输出uiK个整数

输出参数(指针指向的内存区域保证有效):

int * pOutputArray //最小的uiK个整数

练习阶段: 初级

运行时间限制: 10Sec

内存限制: 128MByte

输入:

输入说明

1 输入两个整数

2 输入一个整数数组

输出:

输出一个整数数组

样例输入: 5 2

1 3 5 7 2

样例输出: 1 2

分值:100分

代码如下:

 1 import java.util.Scanner; 3 /** 4 * 输入n个整数,输出k个最小的 5 * @author keli 7 */ 8 public class GetKSmaller {10 public static void main(String[] args) {11 //输入12 Scanner cin = new Scanner(System.in)  13 int n = cin.nextInt() 14 int k = cin.nextInt() 15 int [] arr = new int[n] 16 for(int i = 0  i i++){17 arr[i] = cin.nextInt() 19 cin.close();20 //简单的错误判断21 if(k n){22 System.out.println("error");24 //获取结果25 int [] res = new int[k] 26 getMinK(n,arr,k,res) 27 //输出28 for(int i = 0  i k-1  i++){29 System.out.print(res[i]+" ") 31 System.out.println(res[k-1]); 34 /**35 * 找出最小的K个数,并按大小存储到res数组中36 * @param n37 * @param arr38 * @param k39 * @param res40 */41 private static void getMinK(int n, int[] arr, int k, int [] res) {42 //为了不改变原先的数据,所以将源数据复制过来43 int [] newArr = new int[n] 44 for(int i = 0  i i ++){45 newArr[i] = arr[i] 48 //简单排序算法,对数据进行排序49 int temp 50 int index 51 for(int i = 0  i i ++){52 temp = newArr[i] 53 index = i 54 for(int j = i+1  j j++){55 if(temp newArr[j]){56 temp = newArr[j] 57 index = j 60 if(index != i){61 newArr[index] = newArr[i] 62 newArr[i] = temp 63 } 64 //将相应的数据存放到res数组中65 res[i] = newArr[i] 66 } 69 }

其中非常值得注意的是华为的OJ平台的输出要求非常变态和死板,这种类型的输出只能是一个数后加一个空格(不能用Tab),然后最后一个数之后不能空格