gpt4 book ai didi

c - 程序正在比较除数组 [0] 之外的每个数组条目并正常工作

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:55 30 4
gpt4 key购买 nike

我正在尝试以随机顺序生成数字 1-7 并将它们添加到数组中。我的代码应该生成数字,检查生成的数字以查看它是否已经在数组中,如果没有,则将数字添加到数组中。唯一不能正常工作的数组位置是 n[0]。我一直在努力解决这个问题,但我被卡住了,任何帮助将不胜感激。最后 3 次我运行我得到的程序:

3, 1, 5, 2, 3, 4, 7
6, 1, 3, 7, 5, 2, 6
5, 1, 7, 3, 6, 2, 5

生成随机数的代码

int * randomize()
{
static int n[7];
int i = 0;
int j = 0;
int check = 0;
int check2;

srand((unsigned)time( NULL ));
for( i = 0; i < 7; i++)
{
check = (rand() % 7);
check += 1;

for( j = 0; j < 7; j++)
{
check2 = (int) n[j];

if(check == check2)
{
check = (rand() % 7);
check += 1;
j = 0;
}
}

n[i] = check;
j = 0;
}
return n;
}

下面是从 main 调用函数并打印数组的代码

int *r;

r = randomize();

for( i = 0; i < 7; i++){
printf("%i\n", *(r + i));
}

最佳答案

if(check == check2)
{
check = (rand() % 7);
check += 1;
j = 0;
}

要重新启动内部循环,请将 j 设置为 0。当循环进入下一次迭代时,j++ 将其递增为 1。这会导致它跳过第一个索引.将分配更改为:

j = -1;

如果这看起来有点老套,我同意,确实如此。我建议重新安排一些事情,这样你就不必这样做了。例如,逻辑可能是:

for (i = 0; i < 7; ++i) {
bool dupe = false;

do {
n[i] = random(7) + 1;

for (j = 0; j < i; ++j) {
if (n[i] == n[j]) {
dupe = true;
break;
}
}
}
while (dupe);
}

或者,更好的是,甚至不要生成随机数,然后检查是否有重复项。相反,按顺序生成所有数字,然后 scramble the list .这将快得多,而不会随着列表变得越来越满并且查找可用号码的时间越来越长而出现减速。

关于c - 程序正在比较除数组 [0] 之外的每个数组条目并正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30042463/

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