0

我到处查找这个话题。我还没有找到任何符合我条件的话题。我想生成随机数从-100到100的数组[10]。这是我的代码

int main (){
int a[10];
int i;

for (i=0;i<10;i++)
{
    a[i]= rand() % 201 -100;
    printf ("%d\n",a[i]);
    }


    system ("pause");
    return 0;
}

每次我运行程序时输出都是一样的。我的问题是如何打乱那些随机数数组?对不起我的英语不好

4

4 回答 4

4

你不需要洗牌,更容易播种随机生成器

在 C 中,这通常通过调用srand()当前时间来完成,如下所示:

srand(time(NULL));

请注意,随机数生成器与一天中的时间之间没有逻辑联系;这只是获取每次运行程序时可能不同的数字的便捷方法。如果你手边有一个,你也可以从一些不同的来源为生成器播种。

另请注意,您的随机数数组可能包含重复项,除非您添加代码将它们过滤掉,这可能会......烦人。

于 2013-05-08T09:33:14.380 回答
3

您需要将随机种子初始化为代表当前时间(调用时间)的值,以生成不同的值:

/* initialize random seed: */
  srand (time(NULL));
于 2013-05-08T09:33:07.093 回答
0

看到这个

希望能帮助到你

否则,您可以尝试使用当前时间播种兰特。

于 2013-05-08T09:34:12.083 回答
0

这是一个工作代码,它从用户那里输入一个低数字和高数字,生成一个数组,按顺序打印数组,然后使用 Fisher-Yates 启发的带有 rand() 的随机播放进行随机播放,并打印随机播放的数组。它应该适用于几乎任何范围的数字,并且可以用于打乱字符以及进行一些小的修改。

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

int main(void)
{
    int low, high;
    printf("Choose a range of numbers and first enter the lowest number in the range: ");
    scanf("%d", &low);
    printf("Please enter the highest number in the range: ");
    scanf("%d", &high);
    int arraylength = high - low + 1;
    int numarray[arraylength];

    printf("Here is your range of numbers in numerical order:\n");

    /* Create array from low and high numbers provided. */
    int i;
    int j = low;
    for (i = 0; i < arraylength; i++)
    {
       numarray[i] = j + i;
       printf("%d\t", numarray[i]);
    }

    /* Shuffle array. */
    srand(time (NULL));
    int temp;
    int randindex;
    for (i = 0; i < arraylength; i++)
    {
        temp = numarray[i];
        randindex = rand() % arraylength;
        if (numarray[i] == numarray[randindex])
        {
            i = i - 1;
        }
        else
        {
            numarray[i] = numarray[randindex];
            numarray[randindex] = temp;
        }
    }

    printf("\nHere is your range of numbers in random order:\n");

    /* Print shuffled array. */
    for (i = 0; i < arraylength; i++)
    {
        printf("%d\t", numarray[i]);
    }
    getchar();
    return 0;
}
于 2017-03-11T14:44:27.500 回答