【发布时间】:2019-04-25 15:36:37
【问题描述】:
我正在尝试编写一个程序,该程序将使用 1 到 22 之间的数字填充 100 个元素的数组,然后在 20 x 5 表中打印该数组。我能够填充数组并打印它,但只能让它与数字 1-100 一起工作,我怎样才能将它更改为只做数字 1-22?
#include <stdio.h>
#include <stdlib.h>
#define ARY_SIZE 100
void random (int randNos[]);
void printArray (int data[], int size, int lineSize);
int main(void)
{
int randNos [ARY_SIZE];
random(randNos);
printArray(randNos, ARY_SIZE, 20);
return 0;
}
void random (int randNos[])
{
int oneRandNo;
int haveRand[ARY_SIZE] = {0};
for (int i = 0; i < ARY_SIZE; i++)
{
do
{
oneRandNo = rand() % ARY_SIZE;
} while (haveRand[oneRandNo] == 1);
haveRand[oneRandNo] = 1;
randNos[i] = oneRandNo;
}
return;
}
void printArray (int data[], int size, int lineSize)
{
int numPrinted = 0;
printf("\n");
for (int i = 0; i < size; i++)
{
numPrinted++;
printf("%2d ", data[i]);
if (numPrinted >= lineSize)
{
printf("\n");
numPrinted = 0;
}
}
printf("\n");
return;
}
【问题讨论】:
-
rand() % ARY_SIZE-->rand() % 22 + 1 -
你使用
haveRand[]数组来避免已经使用过的数字,但是如果你需要用1到22的随机数填充100个数组元素,那么这将是不可能的.您的do ... while循环将永远运行。 -
我建议用顺序值 1-22 填充一个数组,然后是 shuffling the array。它会快得多。
-
@MFisherKDX 你可以用随机数 [1, 22] 填充一个包含 100 个元素的数组而不会重复?
-
@Swordfish ...不。我想我对问题陈述感到困惑。 OP应该澄清她在问什么......这可能是不可能的。