//蛇形填数
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int row = 0;//标记行号
int col = 0;//标记列号
int flag = 0;//0标记斜向下走,1标记斜向上走
int arr[50][50] = { 0 };
int i = 1;//标记数字
while (1)//不知道多少步走到20行20列,我们这里直接while(1),后面遇到再break
{
if (row ==19&&col == 19)
{
printf("%d", i);
return 0;
}
if (row == 0 && col == 0)//1作为起始点单独拎出来考虑
{
arr[row][col] = 1;
col++;
i++;
continue;//跳过本次循环
}
if (row == 0 && col != 0)//走到第一行有两种情况(不考虑1)
{
if (arr[1][col - 1] == i - 1)//是斜向上走过来的,比如5到6
{
arr[row][col] = i;
col++;//接下来要向右走一格
}
else//从第一行左边一个,走过来的,比如6到7
{
arr[row][col] = i;
flag = 0;//如果是第一行向右走了一格,那么接下来要斜向下走了
row++;
col--;
}
i++;
continue;
}
if (col == 0 && row != 0)//走到第一列有两种情况
{
if (arr[row - 1][1] == i - 1)//是斜向下走过来的,比如2到3
{
arr[row][col] = i;
row++;
}
else//从第一列上边一个,走过来的,比如3到4
{
arr[row][col] = i;
flag = 1;//如果是第一列向下走了一格,那么接下来要斜向上走了
row--;
col++;
}
i++;
continue;
}
if (row != 0 && col != 0)
{
if (flag == 0)//斜向下走
{
arr[row][col] = i;
row++;
col--;
}
else//斜向上走
{
arr[row][col] = i;
row--;
col++;
}
i++;
continue;
}
}
}
后记:这题关于arr的大小,一开始我也是用的arr[20][20],但是不知道为啥一直会越界,然后索性直接把arr大小弄大一点,如果有了解为啥20*20会越界报错的小伙伴欢迎私信我,我也学习一下。下图是当时arr[20][20]报错的情况: