输入n个整数,输出其中最小的k个。
详细描述:
接口说明
原型:
bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint uiK, int * pOutputArray);
输入参数:
unsignedint uiInputNum //输入整数个数
int * pInputArray //输入整数数组
unsignedint uiK //需输出uiK个整数
输出参数(指针指向的内存区域保证有效):
int * pOutputArray //最小的uiK个整数
返回值:
false 异常失败
true 输出成功
知识点: 循环,数组
题目来源: 内部整理
练习阶段: 初级
运行时间限制: 10Sec
内存限制: 128MByte
输入:
输入说明
1 输入两个整数
2 输入一个整数数组
输出:
输出一个整数数组
样例输入: 5 2
1 3 5 7 2
样例输出: 1 2
#include<iostream>
using namespace std;
int main()
{
int k,n,tmp;
cin>>n>>k;
int arr[100]={0};
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(arr[i]>arr[j])
{
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
for(int i=0;i<k-1;i++)
{
cout<<arr[i]<<" ";
}
cout<<arr[k-1]<<"\n";
return 0;
}//值得注意的是最后的输出不知道为什么要换行,每个值之间要空格
第二种做法:
#include<stdio.h>
#include <iostream>
using namespace std;
struct Arr
{
int *pBase;//存储数组第一个元素的地址
// int len; //元素个数
};
int main(void)
{
int len,k;
struct Arr arr;
struct Arr * prr;
prr=&arr;
cin>>len;
cin>>k;
prr->pBase=(int*)malloc(sizeof(int)*len);
for(int i=0;i<len;i++)
{
int a;
cin>>a;
prr->pBase[i]=a;
}
for(int i=0;i<len;i++)
{
for(int j=i+1;j<len;j++)
{
if(prr->pBase[i]>prr->pBase[j])
{
int t;
t=prr->pBase[i];
prr->pBase[i]=prr->pBase[j];
prr->pBase[j]=t;
}
}
}
for(int i=0;i<k;i++)
{
cout<<prr->pBase[i];
}
return 0;
}//这种方法是链表的思路来用的数组其实比较麻烦,但是理论来说内存的管理会比较好。