gpt4 book ai didi

c - 如何使1到9之间的随机代数不重复

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:44 25 4
gpt4 key购买 nike

我在网站上搜索了这个问题,其中之一对我有所帮助。我想制作一个随机数在 1 到 9 之间的拼图,我使用这种方法:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
int i = 1, num[9] = {1,2,3,4,5,6,7,8,9}, k = 1;

srand(time(NULL));
for (i = 1; i < 10; i++) {
num[i] = i;
}
for (i = 1; i < 10; i++) {
int j = i + rand()%(10 - i);
int temp = num[i];
num[i] = num[j];
num[j] = temp;

if ((i - 1) % 3 == 0)
{
printf(" %i: ", k);
k++;
}


printf(" %i", num[i]);

if (i % 3 == 0)
{
printf("\n");
}
}
return 0;
}

但我对这段代码有疑问。它使最后两个数字相同!!!谁能帮帮我??

最佳答案

您可以像这样生成一个唯一范围的随机数。它的工作原理是创建一个包含所有可用号码的池,随机选择一个,然后从池中删除该号码。同样的方法可以用于处理一副纸牌,而无需明确洗牌。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define RANGE 9 // range of numbers

int main() {
int pool[RANGE];
int size, n;
for (size=0; size<RANGE; size++) {
pool[size] = size+1; // create number pool 1...
}
srand((unsigned)time(NULL));
while (size) { // generate random sequence
n = rand() % size; // random array index
printf("%d ", pool[n]); // select number from pool
pool[n] = pool[--size]; // remove from pool
}
printf("\n");
return 0;
}

这也是您程序的调试版本。除了错误的数组索引之外,您的错误是在随机化完成之前从数组中打印出来。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
int i = 1, num[9] = {1,2,3,4,5,6,7,8,9};

srand((unsigned)time(NULL));
for (i=0; i<9; i++) {
int j = rand() % 9;
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}

for (i=0; i<9; i++) {
if (i % 3 == 0)
printf("\n %d: ", 1+i/3);
printf(" %i", num[i]);
}
printf("\n");
return 0;
}

关于c - 如何使1到9之间的随机代数不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867248/

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