原型:
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),然后最后一个数之后不能空格