/*
本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。
欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。
我是一名有诗人气质的网络安全工程师
期待与你的思想交流碰撞出智慧的花火
水木清华
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;
}
*/