如何按升序或降序生成随机数

时间:2015-08-28 07:54:37

标签: c++

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
    int n,c;

    cout<<"Enter number of items to be sorted: ";
    cin>>n;

    int data[n];

    cout<<"Unsorted Array: \n";
    for (int x=0;x<n;x++)
    {
        data[x]=rand();
        cout<<data[x]<<"\t";
    }
    cout<<endl;
}

此代码生成没有特定顺序的随机数。如何使此代码以升序或降序生成随机数。

我已经尝试在这个论坛中搜索,但我发现只是生成没有订单的随机数字。

任何帮助将不胜感激。 提前谢谢。

4 个答案:

答案 0 :(得分:1)

您无法:出于某种原因,他们被称为随机。如果您需要一个排序的随机数组,您应首先填充数组,然后对其进行排序。另外,如果您有c ++ 11,我建议将std::array用于固定大小的数组。

std::vector<int> data;
for (int x=0;x<n;x++)
{
    data.push_back(rand());
}

std::sort(data.begin(), data.end());

答案 1 :(得分:1)

我不认为,有一个内置的解决方案。根据您想要的统计属性,您可以生成n个数字并在之后对它们进行排序,或者只是将ne随机数添加到前一个。

在c ++ 11中,Btw rand或多或少已被弃用。您应该使用随机标头中的工具。

int main() {
    //init generator with number from true random device
    mt19937 gen(random_device{}());
    //define desired distribution equal to what you would get with rand()
    uniform_int_distribution<> dist(0, RAND_MAX);

    int n;
    cout << "Enter number of items to be sorted: ";
    cin >> n;

    //generate numbers
    vector<int> data;
    for (int x = 0; x < n; x++) {
        data.push_back(dist(gen));
    }
    //sort numbers
    sort(begin(data), end(data));

    //print numbers
    for (auto& e : data) {
        cout << e << "\t";
    }
    cout << endl;
}

答案 2 :(得分:1)

您可以使用:

sum=0;
for(i=1;i<=n;++i)
{ 
   sum+=random(100);
   arr[i]=sum;
}

答案 3 :(得分:1)

这是在Java上不进行排序的一种方法,假设您想要所有正整数(显然可以调整数组长度):

public static void main(String[] args) {

    Random rndm = new Random();
    int arrayLength = 10;
    int randOutput;
    int checkAscend;
    //determining array size
    int[] array = new int[arrayLength];
    //populating array with random ascending integers
    for(int i = 0;i < arrayLength;i++) {
        if(i == 0) {
            checkAscend = 0;
        }
        else {
            checkAscend = array[i - 1];
        }
        randOutput = rndm.nextInt();
        if(randOutput > checkAscend) {
            array[i] = randOutput;
        }
        else {
            i--;
            continue;
        }
    }
    System.out.println(Arrays.toString(array));
}