【发布时间】:2019-12-17 00:11:21
【问题描述】:
我想使用 C 编程以随机方式生成数字 1 到 4。
我已经准备好在while 循环中直接打印a[0],对于任何其他元素,程序会检查从a[1] 到a[3] 的新数字是否与之前的任何元素相同。已经为此创建了一个函数。 int checkarray(int *x, int y)。
该函数通过减少传递的地址来一一检查当前元素和之前的元素。如果它与值匹配,则通过将值零分配给条件变量 (int apply) 来退出循环。
return apply;
在main 程序中,如果check==1 匹配int check,则打印数字,否则重复循环。
面临的问题:生成的随机数在 2 到 4 之间变化。 例如
2 4 2 4 3 1 3 3 4等
有时也会重复。
#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 函数在到达 exit(0) 时会正常结束程序。我不确定那是你想要的。
-
你有什么问题?
-
有一种更简单的方法可以做到这一点。将四个数字放在一个数组中,随机交换,然后依次使用。
-
你想要的是一个带有该数组的 Fisher Yates 洗牌
-
嘿,感谢您在描述中付出了巨大的努力。但我不明白你的问题是什么。您能否描述一下您遇到的问题,而不仅仅是您想要完成的任务?也许您也可以使用tour 并阅读minimal reproducible example