您的位置:首页 > 其它

华为OJ——输入n个整数,输出其中最小的k个

2016-11-04 16:50 363 查看
今天刷的这题比较简单,长时间没刷 OJ 了,今天那这个小题目练练手,回忆一下 C++ 相关知识。先上题目:



示例代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[]) {
int count;
int number;
int i;
int j;
int minCount;
vector<int>vec;
cin>>count;
cin>>minCount;
for(i=0;i<count;i++)
{
cin>>number;
vec.push_back(number);
}
sort(vec.begin(), vec.end());

for (j = 0; j < minCount; j ++)
{
cout<<vec.at(j);
if (j == minCount - 1) {
break;
}
cout<<" ";
}
return 0;
}


知识点解析:

(1)sort(vec.begin(), vec.end()) : 使用 sort 需要包含 algorithm 头文件,默认是从小到大排序,如果需要从大到小排序,则可考虑假如并改写 comp 函数。

bool comp(const int &a,const int &b)
{
return a>b;
}
sort(vec.begin(),v.end(),comp);


比较时sort函数根据comp函数进行判断输的大小,系统默认 a < b 时返回真,于是从小到大排,而 comp 函数设定为 a > b 时返回为真,那么最终得到的排序结果也相应的从小到大变成从大到小。

(2)通常来说,假设 vec 是一个 vector 对象,则 vec.at(n) 和 vec
是一样的,只不过前者会检查是否越界(因此花费的时间稍多),如果 n 越界,会抛出 out_of_range 异常,而后者不会(后者越界会导致未定义行为)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: