-3

这是我的代码:

#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"); 
}

如何对计算机将生成的数字进行排序并将它们从低到高排列,然后打印出第二高的数字?谢谢你。

4

4 回答 4

3

有两个选项 - 记住 a 中所有生成的数字std::vector,然后调用std::sort它并打印第二个数字。这在内存和时间上都是次优的。

第二个(也是首选)选项是记住临时变量中最小的两个数字,并在生成后续随机数时调整它们。(或使用std::partial_sort,但在这种情况下这似乎有点过分了)。

于 2013-04-01T19:59:21.773 回答
0

不要直接在for循环中打印数字,而是将数字添加到std::vector<>. 然后你可以调用std::sort()对向量进行排序。

于 2013-04-01T20:01:47.973 回答
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());
于 2013-04-01T20:03:47.283 回答
0

vector你可以使用and来做这样的事情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"); 
}
于 2013-04-01T20:03:58.653 回答