gpt4 book ai didi

c - 在 4x4 网格上生成图案

转载 作者:行者123 更新时间:2023-11-30 17:40:55 25 4
gpt4 key购买 nike

我想使用 C 生成一个模式,这样在 4x4 网格上,9 个元素应该为 1,其余为 0。这 9 个元素应该以 4,3 和 2 为一组,这样group 在水平或垂直方向上的值为 1。另外,1 不应该重叠。以下是一些示例:

示例1

1111
1101
0001
0001

示例2

1011
1100
1100
1100

但它不应该显示这样的内容(重叠)

0111
0100
0100
1100

我编写了以下代码来生成上述模式,但它大多会失败(段错误)或给出错误的模式(1 的重叠):

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

void pattern(int num, int arr[][4], int checkcol[], int checkrow[]);

int main() {
int i,j, arr[4][4], checkcol[4], checkrow[4];
for(i=0; i<4; i++) {
checkcol[i] = -1;
checkrow[i] = -1;
for(j=0; j<4; j++)
arr[i][j] = 0;
}

for(i=4; i>1; i--)
pattern(i, arr, checkrow, checkcol);

for(i=0; i<4; i++) {
for(j=0; j<4; j++) {
printf("%d", arr[i][j]);
}
printf("\n");
}
return 0;
}

void pattern(int n, int arr[][4], int checkcol[], int checkrow[]) {
int i;
srand (time(NULL));

//random number to decide whether to put 1's horizontally or vertically
int rc = rand()%2;

//random number to decide to put 1's in which row/column
int num = rand()%4;

if(rc) {
//checks if the column has not already been marked
if(checkcol[num]!=1) {
for(i=0; i<n; i++)
arr[i][num] = 1;

checkcol[num] = 1;
}
else {
pattern(n, arr, checkrow, checkcol);
}
}
else {
//checks if the row has not already been marked
if(checkrow[num]!=1) {
for(i=0; i<n; i++)
arr[num][i] = 1;

checkrow[num] = 1;
}
else {
pattern(n, arr, checkrow, checkcol);
}
}
}

最佳答案

它崩溃是因为它无限递归地调用pattern()。而且似乎没有任何代码在矩阵中放置九个“1”。这些示例并不那么清楚,因为确实出现了从一行到下一行的重叠 - 我猜您的意思只是每行重叠。

我认为真正的答案是重写代码。它可以被简化。仅使用 16 个元素的一维数组即可大大简化编码。就我个人而言,我会避免使用递归解决方案,除非有理由这样做。当然,您可能希望学习这项技术。

关于c - 在 4x4 网格上生成图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21335185/

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