/* 本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师 期待与你的思想交流碰撞出智慧的花火 水木清华 2020-03-24 输入 n 个整数,输出其中最小的 k 个 */ //普通法: #include <iostream> #include <algorithm> using namespace std; //输入 n 个整数,输出其中最小的 k 个的函数接口 int Get_Min_K(unsigned int N, unsigned int K) { int Array[N]; //整数数组 //输入 N 个整数(组成的整数数组) for (int i = 0; i < N; i++) { cin >> Array[i]; } //数组元素排序 sort(Array, Array + N); //输出前 K 个整数 for (int i = 0; i < K; i++) { cout << Array[i] << ' '; } cout << endl; return 0; } //主函数 int main() { unsigned int N, K; while (cin >> N >> K) { Get_Min_K(N, K); } return 0; } /* bool GetMinK(unsigned int uiInputNum, int * pInputArray, unsignedint uiK, int * pOutputArray); 输入参数: unsigned int uiInputNum //输入整数个数 int * pInputArray //输入整数数组 unsigned int uiK //需输出uiK个整数 输出参数(指针指向的内存区域保证有效): int * pOutputArray //最小的uiK个整数 返回值: false 异常失败 true 输出成功 */ /* //指针法: //基于 Grooovvve 的指向指针的指针实现方案 #include <iostream> #include <algorithm> using namespace std; bool cmp(int a, int b) { return a < b; } //输入 n 个整数,输出其中最小的 k 个的函数接口 bool GetMinK(unsigned int uiInputNum, int pInputArray[], unsigned int uiK, int ** pOutputArray) { if(uiInputNum < uiK) { return false; } sort(pInputArray, pInputArray + uiInputNum, cmp); *pOutputArray = new int[uiK]; for(unsigned int i = 0; i < uiK; i++) { (*pOutputArray)[i] = pInputArray[i]; } return true; } int main() { unsigned int n, k; while (cin >> n >> k) { int array[n]; for(int i = 0; i < n; i++) { cin >> array[i]; } int * OutputArray = nullptr; if(GetMinK(n, array, k, &OutputArray)) { for(unsigned int i = 0; i < k; i++) { cout << OutputArray[i] << " "; } cout << endl; delete [] OutputArray; } } return 0; } */