c++ - 在 C 或 C++ 中用 1 到 10^10 的随机数填充数组

标签 c++ c arrays random

我的一部分作业基于一个数组(其大小由用户指定),其中包含从 1 到 10^10 的随机数。然后我们必须找到数组中第 k 个较小的数。这是我尝试过的:

#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <time.h>

using namespace std;

void swap(int *x,int *y)
{
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

int choose_pivot(int i,int j )
{
    return((i+j) /2);
}

// Print array
void printarr(int arr[],int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("%d\t",arr[i]);
}

// Find algorithm
int find1(int arr[],int left,int right,int k)
{
    int i,j,pivot;
    if (left==right)
        return arr[left];
    else
    {
        i=left;
        j=right+1;
        pivot= arr[left];
        do
        {
            do {
                i=i+1;
            } while (arr[i]>=pivot);
            do {
                j =j-1;
            } while (arr[j]<=pivot);
            if (i<j)
                swap(arr[i],arr[j]);
        } while (j<=i);
    }
    swap(arr[left],arr[j]);
    if (k==j)
        return arr[j];
    else if (k<j)
        find1(arr,left,j-1,k);
    else 
        find1(arr,j+1,right,k-j);
}

int main(int argc, char *argv[])
{
    srand(time(NULL));
    int n,i,fi,k;
    printf("Give array's size:\n");
    scanf("%d",&n);
    int pin[n];
    for (i=0;i<n;i++)
        pin[i]=((rand()*rand()) % 1000000000) +1;
    printf("Give k: \n");
    scanf("%d",&k);
    printf("The array contains the following numbers:\n\n");
    printarr(pin,n);
    fi=find1(pin,0,n-1,k);//find the k-th smallest number in the array
    printf("The k-th smallest number is: %d",fi);

    system("PAUSE");
}

如您所见,10^10 是一个非常大的值,我还做了一些其他事情来用随机数填充数组。这是对的吗?还有什么我可以做的吗? 我的第二个问题是查找算法。它不起作用。谁能帮我解决这些问题?非常感谢

最佳答案

long long get_big_rand()
{

    long long result;
    do {
        result = (rand() & 0x3ff);
        result <<= 12;
        result |= (rand() & 0xfff);
        result <<= 12;
        result |= (rand() & 0xfff);
    } while (++result > 10000000000ULL);
    return result;
}

关于c++ - 在 C 或 C++ 中用 1 到 10^10 的随机数填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4700901/

相关文章:

c++ - 使用无效句柄调用 SetEvent

c++ - 为什么选择类型转换功能?

c - 数组压缩算法

c++ - 将 argv 复制到 char 数组时出错

c - 在 VSCode 中使用 gcc 编译 C 程序时出错

C++ 数组删除运算符语法

C# 将数组或列表添加到列表中

java - 从Java中的多维数组获取未知数量的维度

c++ - 正则表达式值到字符串

c++ - 存储机器数据的最佳 NoSQL 方式?