在C中如何在给定范围内洗牌数组中的随机数
我到处都查过这个话题。我还没有找到与我的状况相关的话题。 我想用-100到100的随机数生成数组[10]。这是我的密码在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; 对于(
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()
(和#包括时间()
)的。最好总是总结您发布的链接,否则当链接的材料移动到其他位置时,答案将变得无效,或者不可用。