文章目录
- 每日一言
- 题目
- 解题思路
- 全部代码
- 结语
每日一言
山有榛,隰有苓。云谁之思?西方美人。 --邶风·简兮
题目
解题思路
话不多说,直接看图
通过观察图表,我想到了这种方法:
我将数字放置的位置分为两大类:向右走和向左走
每大类里又分为3小类:
- 向左走:(1)能往左下往左下(2)左下不行向下移(3)下移不行向右移
- 向右走:(1)能往右上往右上(2)右上不行向右移(3)右移不行向下移
知道思路代码就很好写了
全部代码
#include <stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
int arr[n][n];
int i=0,j=0,k=0;
int f=0;//判断移动方向,0右,1左
arr[0][0]=1;
for(k=1;k<n*n;k++)
{
if(f)//左
{
if(i+1<n&&j-1>=0)//左下合理
{
arr[i+1][j-1]=arr[i][j]+1;
i++;
j--;
}
else //左下不合理
{
if(i+1<n)//下移合理
{
arr[i+1][j]=arr[i][j]+1;
i++;
}
else //下移不行,向右移
{
arr[i][j+1]=arr[i][j]+1;
j++;
}
f=0;
}
}
else //右
{
if(i-1>=0&&j+1<n)//右上合理
{
arr[i-1][j+1]=arr[i][j]+1;
i--;
j++;
}
else//右上不合理
{
if(j+1<n)//右移合理
{
arr[i][j+1]=arr[i][j]+1;
j++;
}
else //右移不行,向下移
{
arr[i+1][j]=arr[i][j]+1;
i++;
}
f=1;
}
}
}
//打印
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
结语
请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!
都看到这里啦!真棒(*^▽^*)
可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家
编程小白写作,如有纰漏或错误,欢迎指正