gpt4 book ai didi

c - 如何在C中创建一个随机二维数组,其值仅重复两次

转载 作者:行者123 更新时间:2023-11-30 16:03:29 25 4
gpt4 key购买 nike

我对 C 编程非常陌生,只做过 if/else、循环、数组、指针、函数和结构。如果有人能告诉我如何创建一个二维数组,其中包含随时间随机的数组,但其值仅重复两次,我将非常高兴...

含义例如:

1 2 3 6
8 7 4 5
7 5 6 3
2 1 4 8

实际上我需要数组为 6x6,到目前为止我已经到了这个阶段,这是行不通的:

int x,y;
int i,j;

srand (time(NULL));

for ( x=0 ; x<6 ; x++){
for ( y=0 ; y<6 ; y++) {
sBoard[x][y] = rand() %36; /*randomization*/

for ( i=0 ; i<6 ; i++){ /*trying to create an unique array*/
for ( j=0 ; j<6 ; j++) {
if ((sBoard[x][y] == sBoard[i][j])) {
x--;
y--;
}
}
}
printf ("%i",sBoard[x][y]);
}
printf("\n");
}

================================================== =========================================我的讲师要求我尝试使用 if 函数来检查该值是否在矩阵上的其他位置重复...这就是为什么我使用“if”...如果您能帮助我,我将非常感激.. 。预先感谢您...

最佳答案

问题是你的 if-then block 仍然不能保证这种程度的唯一性。您必须有一个 while 循环才能使其正常工作。从理论上讲,这个 while 循环永远不会终止,并且(更有可能)每次运行它时执行时间都会明显不同。

可能更容易的方法是用所有值填充二维数组,然后对其进行打乱。你可以作弊,并将其视为一维数组,它仍然会以相同的方式工作。这是一些伪代码:

pointer-to-array pArray;
for i = 0 to 35
pArray[i] = i
numShuffle = 2;
for s = 1 to numShuffle
for i = 0 to 35
swap pArray[i] with pArray[random 0 to 34 - if equal, add 1]

这将保证不存在重复项,并且您的代码将始终花费完全相同的时间来执行(而不是我上面提到的 while 循环可能永远不会终止)。

您也许可以将 numShuffle 设置为 1 并获得满意的结果。如果您发现这是真的,您甚至不需要那个外循环。

关于c - 如何在C中创建一个随机二维数组,其值仅重复两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4085511/

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