大体代码框架如下:
#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;
}
作者表示不理解本体的运作原理但是根据流程图写出解决代码还是较为轻松的,重点在于能够准确识别出流程图中的内外循环并且使用合适的循环来解决。