这是我的代码:
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
int main()
{
srand((unsigned) time(0));
int random_integer;
int lowest =- 10, highest = 10;
int range = (highest-lowest) + 1;
for(int index = 0; index < 20; index++) {
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << ' ';
}
cout << "\n=============== \n";
system("pause");
}
如何对计算机生成的数字进行排序,并将它们从最低到最高排列,然后打印出第二个最高数字? 谢谢。
答案 0 :(得分:3)
有两个选项 - 记住std::vector
中生成的所有数字,然后在其上调用std::sort
并打印第二个数字。这在内存和时间上都是次优的。
第二个(也是首选)选项是记住临时变量中最低的两个数字,并在生成后续随机数时对其进行调整。 (或者使用std::partial_sort
,但在这种情况下看起来有点过分了。)
答案 1 :(得分:0)
不是直接在for
循环中打印数字,而是将号码添加到std::vector<>
。然后,您可以调用std::sort()
对矢量进行排序。
答案 2 :(得分:0)
您应该考虑使用<algorithm>
来帮助您在向量中创建随机数,然后简单地对向量进行排序:
#include <algorithm>
#include <vector>
int myRandomFunction() {
...
}
/* Preallocate some space */
std::vector<int> values(100);
std::algorithm::generate(values.begin(), values.end(), myRandomFunction);
std::sort(values.begin(), values.end());
答案 3 :(得分:0)
您可以使用vector
和sort()
执行此类操作:
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
srand((unsigned)time(0));
int random_integer;
int lowest=-10, highest=10;
int range=(highest-lowest)+1;
for(int index=0; index<20; index++){
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
v.push_back(random_integer);
//cout << random_integer << ' ';
}
sort(v.begin(),v.end());
cout << endl << v[v.size()-2] << endl;
cout<<"\n=============== \n";
system("pause");
}
这只打印出第二高的数字:
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=-10, highest=10;
int a=lowest,b=lowest;
int range=(highest-lowest)+1;
for(int index=0; index<20; index++){
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << ' ';
if(a<random_integer)
{
a=random_integer;
continue;
}
if(b<random_integer)
{
b=random_integer;
continue;
}
//cout << random_integer << ' ';
}
cout << endl << min(a,b) << endl;
cout<<"\n=============== \n";
system("pause");
}