**这不是生成数字,而是重新排列1d数组中的数字 需要帮助随机化rbox数组中0,1,2,3数字的序列。然而,当随机时,它显示1,1,1,1或2,2,2,2等等。任何人都知道如何将序列随机化为0,3,2,1或2,0,1,3等? / p>
srand(time(NULL));
int randomm = rand()%4;
int rbox[4];
int x;
for(x=0;x<4;x++)
{
rbox[x] = 0;
}
for(x=0;x<4;x++)
{
rbox[x] = randomm;
}
for(x=0;x<4;x++)
{
printf("%i", rbox[x]);
}
答案 0 :(得分:0)
for(x=0;x<4;x++)
{
rbox[x] = rand()%4;
}
将数组的每个元素分配给rand()
的不同输出。
在这里,您将数组rbox
的每个元素分配给相同的值(random
) - 这解释了为什么您获得相同的值。
从用户的评论来看,似乎OP想要创建阵列的随机播放。
现在要么这样做,你可以用值0,1,2,3
初始化整个数组然后应用这个算法
-- To shuffle an array a of n elements (indices 0..n-1):
for i from n−1 downto 1 do
j ← random integer such that 0 ≤ j ≤ i
exchange a[j] and a[i]
另一种方法是遵循这个算法: -
- 跟踪数字范围(这基本上是
highestNumInRange - iteration Number
)。- 然后跟踪您需要生成的元素数量。
醇>3.1。如果
2
乘以rand()
的比率小于1
,则将迭代次数放入数组中。3.2。否则增加迭代次数。
答案 1 :(得分:0)
这是错误编码的主要例子。
randomm变量获取值一次,并且在循环中为数组分配相同的值四次。
这样做,
for(x=0;x<4;x++)
{
rbox[x] = rand()%4;
}
但这有可能重复随机值。 您需要在每次迭代时验证数组先前是否已经发生过。
答案 2 :(得分:0)
填充数组,然后将其洗牌并打印混洗阵列。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 4
int main() {
int rbox[SIZE] = { 0};
int loop = 0;
int index = 0;
int swap = 0;
srand ( time( NULL));
for ( loop = 0; loop < SIZE; loop++) {
rbox[loop] = loop;
}
loop = SIZE;
while ( loop) {
index = rand ( ) % loop;
loop--;
swap = rbox[index];
rbox[index] = rbox[loop];
rbox[loop] = swap;;
}
for ( loop = 0; loop < SIZE; loop++) {
printf ( "%d ", rbox[loop]);
}
printf ( "\n");
return 0;
}