NWAFU-1555五子棋

在这里插入图片描述
在这里插入图片描述
大体代码框架如下:

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

struct solu
{
    int x;
    int y;
    char direction;
};

int Judge(char **, int,  char, struct solu *);

int main()
{
    int n, i;
    char ch;
    struct solu s = {-1, -1, ' '};
    scanf("%c%d", &ch, &n);

    char *board[n];
    for(i = 0; i < n; i++)
    {
        board[i] = (char *)malloc((n+1)*sizeof(char));
        memset(board[i], 0, (n+1)*sizeof(char));
        scanf("%s", board[i]);
    }

    if (Judge(board, n, ch, &s) == 1)
        printf("%d %d %c\n", s.x, s.y, s.direction);
    else
        printf("0\n");

    for(i = 0; i < n; i++)
    {
        free(board[i]);
    }

    return 0;
}

解决代码如下:

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

struct solu
{
	int x;
	int y;
	char direction;
};

int Judge(char** str, int n, char ch, struct solu* ps)
{
	char t = '\0';
	int i = 0;
	for (i = 0; i < n; i++)//观察发现流程图中含i++,说明可以使用循环体来解决,i用于外循环
	{
		for (int j = 0; j < n; j++)
		{
			if (str[i][j] == ch)
			{
				if (j <= n - 5 && str[i][j + 1] == ch && str[i][j + 2] == ch && str[i][j + 3] == ch && str[i][j + 4] == ch)
					t = '-';
				else if (i <= n - 5 && str[i + 1][j] == ch && str[i + 2][j] == ch && str[i + 3][j] == ch && str[i + 4][j] == ch)
					t = '|';
				else if (i <= n - 5 && j <= n - 5 && str[i + 1][j + 1] == ch && str[i + 2][j + 2] == ch && str[i + 3][j + 3] == ch && str[i + 4][j + 4] == ch)
					t = '\\';
				else if (j >= 4 && i <= n - 5 && str[i + 1][j - 1] == ch && str[i + 2][j - 2] == ch && str[i + 3][j - 3] == ch && str[i + 4][j - 4] == ch)
					t = '/';//以上四种情况为一步
				if (t != '\0')
				{
					ps->x = i;
					ps->y = j;
					ps->direction = t;
					return 1;
				}
			}
		}
	}
	return 0;
}

int main()
{
	int n, i;
	char ch;
	struct solu s = { -1, -1, ' ' };
	scanf("%c%d", &ch, &n);

	char* board[n];
	for (i = 0; i < n; i++)
	{
		board[i] = (char*)malloc((n + 1) * sizeof(char));
		memset(board[i], 0, (n + 1) * sizeof(char));
		scanf("%s", board[i]);
	}

	if (Judge(board, n, ch, &s) == 1)
		printf("%d %d %c\n", s.x, s.y, s.direction);
	else
		printf("0\n");

	for (i = 0; i < n; i++)
	{
		free(board[i]);
	}

	return 0;
}

作者表示不理解本体的运作原理但是根据流程图写出解决代码还是较为轻松的,重点在于能够准确识别出流程图中的内外循环并且使用合适的循环来解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值