题目如上边那副图,我的思考为下图,想将框框里边打造成为一个函数,但是这个函数里边得输出a[i]
呀,emmm,不会啦。又菜又爱玩罢了~
求解求解
或者是针对蛇形的其他方法,提供一点点思路即可,感谢感谢
解决方案如下,思路写在注释里了,有帮助望采纳,谢谢!
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n = 0, i = 0, j = 0;
scanf("%d", &n); //输入行列数
//动态申请n行n列的二维数组,如果觉得麻烦根据题目要求申请足够大的也行
int** num = (int**)malloc(sizeof(int*) * n);
for (i = 0; i < n; i++)
num[i] = (int*)malloc(sizeof(int) * n);
//我们接下来的思路就是一圈一圈往中心填数字,数字是逐渐递增的,用count来表示,初始值为1,结束时为n*n
int start = 0, finish = n - 1, count = 1; //start指当前行列最小值,finish指当前行列最大值
while (count <= n * n)
{
//找到题目里1开始的位置,我们开始,根据count增加的方向走
//每一圈的规律都是一样的,结束的标志就是count达到了指定的大小
for (i = start; i <= finish; i++) //从上到下,行增列不变
num[i][finish] = count++;
for (j = finish - 1; j >= start; j--) //从右往左,列减行不变
num[finish][j] = count++;
for (i = finish - 1; i >= start + 1; i--) //从下向上,行减列不变
num[i][start] = count++;
for (j = start; j <= finish - 1; j++) //从左向右,列增行不变
num[start][j] = count++;
start++; finish--; //缩圈,行列的最小值加1,最大值减1
}
for (i = 0; i < n; i++) //输出
{
for (j = 0; j < n; j++)
printf("%-5d", num[i][j]);
printf("\n");
}
//最后记得释放掉申请的内存
for (i = 0; i < n; i++)
free(num[i]);
free(num);
return 0;
}