在C中如何在给定范围内洗牌数组中的随机数

在C中如何在给定范围内洗牌数组中的随机数,c,C,我到处都查过这个话题。我还没有找到与我的状况相关的话题。 我想用-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; } int main(){ INTA[10]; int i; 对于(

我到处都查过这个话题。我还没有找到与我的状况相关的话题。 我想用-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;
}
int main(){
INTA[10];
int i;

对于(i=0;i,您需要将随机种子初始化为表示当前时间(调用时间)的值,以生成不同的值:

/* initialize random seed: */
  srand (time(NULL));

你不需要洗牌,更容易洗牌

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

srand(time(NULL));
请注意,随机数生成器与一天中的时间之间没有逻辑联系;它只是一种方便的方法,可以获取每次运行程序时都可能不同的数字。如果手头有其他来源,也可以从其他来源为生成器设置种子

还要注意的是,你的随机数数组可能包含重复数,除非你添加代码来过滤掉它们,这可能会…让人讨厌。

希望能有帮助


否则,您可以尝试在当前时间内植入rand。

下面是一个工作代码,它从用户处输入一个低和高的数字,生成一个数组,按顺序打印数组,然后使用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;
}
#包括
#包括
#包括
内部主(空)
{
int低,高;
printf(“选择一个数字范围,首先输入该范围内的最低数字:”);
扫描频率(“%d”和“低”);
printf(“请输入范围内的最大数字:”);
扫描频率(“%d”和“高”);
int arraylength=高-低+1;
int numarray[排列长度];
printf(“这是数字顺序的数字范围:\n”);
/*从提供的低位和高位数字创建数组*/
int i;
int j=低;
对于(i=0;i
您每次都需要对新种子使用
srand()
,以获得不同的输出。可能存在大量重复的示例。您尝试过搜索吗?&您需要为
rand()
(和
srand()
,和
system()
)和
包含
printf()
(和
#包括
时间()
)的
。最好总是总结您发布的链接,否则当链接的材料移动到其他位置时,答案将变得无效,或者不可用。