gpt4 book ai didi

c - 需要在C编程中生成4个不重复的随机数。 1 至 4

转载 作者:行者123 更新时间:2023-11-30 14:37:18 25 4
gpt4 key购买 nike

我想使用 C 编程以随机方式生成数字 1 到 4。我已经规定直接在 while 循环中打印 a[0] ,并且对于任何其他元素,程序检查是否来自 a[1]a[3] 与前面的任何元素相同。为此创建了一个函数。 int checkarray(int *x, int y)

该函数通过减少传递的地址来逐一检查当前元素与先前元素。如果它与值匹配,则通过将值零分配给条件变量(int apply)来退出循环。

返回应用;

main程序中,它与int check匹配,如果check==1,则打印数字,否则重复循环.

面临的问题:生成的随机数数量在 2 到 4 之间变化。例如

2 42 4 3 1 3 3 4

etc

Also repetition is there sometimes.

#include <stdio.h>
#include <conio.h>

int checkarray(int *x, int y);

void main() {
int a[4], i = 0, check;

srand(time(0));

while (i < 4) {
a[i] = rand() % 4 + 1;
if (i == 0) {
printf("%d ", a[i]);
i++;
continue;
} else {
check = checkarray(&a[i], i);
}
if (check == 1) {
printf("\n%d ", a[i]);
} else {
continue;
}
i++;
}

getch();
}

int checkarray(int *x, int y) {
int arrcnt = y, apply = 1, r = 1;
while (arrcnt > 0) {
if (*x == *(x - 2 * r)) {
apply = 0;
exit(0);
} else {
arrcnt--;
r++;
continue;
}
}
return apply;
}

最佳答案

让我们看一下 checkarray 函数,该函数应该检查数组中是否已存在数字。

这样调用:

check = checkarray(&a[i], i);

其中 a 是一个由 4 个整数组成的数组,而 i 是实际索引,因此它尝试向后扫描数组以查找任何出现的 a[我]

int checkarray(int *x,int y)
{
int arrcnt=y,apply=1,r=1;
while(arrcnt>0)
{
if(*x==*(x-2*r))
// ^^^ Why? This will cause an out of bounds access.
{
apply = 0;
exit(0); // <-- This ends the program. It should be a 'break;'
}
else
{
arrcnt--;
r++;
continue;
}
}
return apply;
}

在不更改界面的情况下(在我看来,这很容易出错),它可以重写为

int check_array(int *x, int y)
{
while ( y )
{
if ( *x == *(x - y) )
return 0;
--y;
}
return 1;
}

可测试here .

不过,还有许多其他问题需要解决,所以请也看看这些问答。

Does "n * (rand() / RAND_MAX)" make a skewed random number distribution?
Why do people say there is modulo bias when using a random number generator?
Fisher Yates shuffling algorithm in C
int main() vs void main() in C
Why can't I find <conio.h> on Linux?

关于c - 需要在C编程中生成4个不重复的随机数。 1 至 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57426877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com