gpt4 book ai didi

c - 将数字添加到网格 C

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

所以我对C语言比较陌生,并且一直在练习它的问题。所以我遇到了这个问题,“我可以去哪里?”:http://www.chegg.com/homework-help/questions-and-answers/c-coding-java-c--c-coding-bouncy-string-tasked-write-program-take-parameters-command-line--q19411844

我设法编写了部分代码,但我不知道如何获取它

| | | |
| | | |
| | | |
| |X| |

我有这样的逻辑:宽度计数器= x - 1,宽度计数器= x + 1,高度计数器= y - 1(基本上是可以从起始位置移动到的前几个步骤, X) 放置的数字限制 - 1。

继续时也一样 因为 i 小于或等于 limit limit - 1 之间的空格现在将被 limit - 2 填充。所以它会像 x-1 && y-1, y-2, y-1 && x+1, x+2 等等,直到最后放置 0 的位置。

但是你如何编写这个并在 for 循环中修复它呢?

    #include <stdio.h>
#include <stdint.h>
#include <string.h>

int main()
{
int width, height, x, y, max;

printf("Enter width: ");
scanf("%d\n", &width);

printf("Enter height: ");
scanf("%d\n", &height);

printf("Enter x: ");
scanf("%d\n", &x);

printf("Enter y: ");
scanf("%d\n", &y);

printf("Enter walking limit: ");
scanf("%d\n", &max);


int b = 0, a = 0; // initalize local variable

for (a = 0; a < height; a++) {

// fill the width
for (b = 0; b < width + 1; b++ ) {

printf("|");

if (b==x && a==y)
{
printf("X");
}else if(((b==x-1) && (a==y)) || ((b==x+1) && (a==y)) || ((a==y-1) && (b==x)))
{
printf("%d", max-1);
}else if(//i am not sure if this will be needed)
{
for(int i = 2; i <= max; i++)
{
//add max - i to spaces after C until max is over.
}
}
}
printf("\n");
}
return 0;
}

最佳答案

您应该将代码拆分为多个函数。

我在下面做了一个简单的例子。

首先我们需要一个函数来显示数组。您需要创建数组,请参阅 malloc。然后将最大步数设置在正确的位置。然后你需要一个函数来进行传播,这是一种非常幼稚的方法。扫描数组并将周围所有单元格的值设置为减一。最多执行次数。

例如:

Enter width: 9
Enter height: 9
Enter x: 3
Enter y: 7
Enter walking limit: 3
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | |0| | | | | |
| | |0|1|0| | | | |
| |0|1|2|1|0| | | |
|0|1|2|3|2|1|0| | |
| |0|1|2|1|0| | | |

代码

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>



static void array_print(int *array, int width, int height)
{

for (int i = 0; i < height; i++) {
printf("|");
for (int j = 0; j < width; j++) {
int val = array[i * width + j];
if (val < 0) {
printf(" |");
} else {
printf("%d|", val);
}
}
printf("\n");
}
}


/**
*
* Update the array if x, y is inside the limit and
* if val is greater than the already set value
*
*/
static void
array_upate(int *array, int width, int height, int x, int y, int val) {

if (x >= 0 && x < width && y >= 0 && y < height) {
int prev = array[y * width + x];
if (val > prev) {
array[y * width + x] = val;
}
}

}

static void array_propagate(int *array, int width, int height)
{

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
int val = array[i * width + j];
if (val > 0) {
array_upate(array, width, height, j, i - 1, val - 1);
array_upate(array, width, height, j, i + 1, val - 1);
array_upate(array, width, height, j - 1, i, val - 1);
array_upate(array, width, height, j + 1, i, val - 1);
}
}
}
}

int main()
{
int width, height, x, y, max;
int *array;

printf("Enter width: ");
scanf("%d", &width);

printf("Enter height: ");
scanf("%d", &height);

printf("Enter x: ");
scanf("%d", &x);

printf("Enter y: ");
scanf("%d", &y);

printf("Enter walking limit: ");
scanf("%d", &max);

/* allocate the array */
array = malloc(sizeof(int) * width * height);

/* Set all to -1 */
memset(array, -1, sizeof(int) * width * height);

/* set the start to max */
array_upate(array, width, height, x, y, max);
/* do the propagation */
while (max-- > 0) {
array_propagate(array, width, height);
}
array_print(array, width, height);
free(array);
}

关于c - 将数字添加到网格 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43058735/

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