螺旋数组
程序员文章站
2022-04-24 14:09:13
...
自己的解法
代码:
//螺旋数组
//此代码没有完成输出末尾无空格
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <math.h>
int main()
{
//输入部分:
int m,n;
scanf("%d %d",&m,&n);
int a[m][n];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d",&a[i][j]);
}
}
//旋转输出部分:
int upToDown = m-1, leftToRight = n-1, downToUp = 0, rightToLeft = 0; //记录从某方向到另一个方向移动后最后一个数的下标
int i = 0, j = 0; //二维数组的arr[i][j]
while (1)
{
//---------------------------------------主要模块,四个方向重复4次
while (j <= leftToRight)
{
printf("%d ", a[i][j++]);
}
j--; //下标回到正常范围内
i++; //移动到另一个方向的第一个
downToUp++; //刚刚移动过的方向最后下标移动1
if (upToDown < 0 || leftToRight < 0 || downToUp >= n || rightToLeft >= m) //判断4个方向的最后的下标有没有越界,如果越界说明螺旋完成,退出
break;
//----------------------------------------
while (i <= upToDown)
{
printf("%d ", a[i++][j]);
}
i--;
j--;
leftToRight--;
if (upToDown < 0 || leftToRight < 0 || downToUp >= n || rightToLeft >= m)
break;
while (j >= rightToLeft)
{
printf("%d ", a[i][j--]);
}
j++;
i--;
upToDown--;
if (upToDown < 0 || leftToRight < 0 || downToUp >= n || rightToLeft >= m)
break;
while (i >= downToUp)
{
printf("%d ", a[i--][j]);
}
i++;
j++;
rightToLeft++;
if (upToDown < 0 || leftToRight < 0 || downToUp >= n || rightToLeft >= m)
break;
}
return 0;
}
上一篇: viewport表现
下一篇: Python海龟画图
推荐阅读
-
Perl数组排序学习笔记
-
qt 中 动态 创建 对象 二维数组 记录
-
qt传递二维数组,列表给python
-
Qt,读取txt文档中一维数组和二维数组的数据、独立文档显示
-
二维动态数组的创建
-
JavaScript实用库:Lodash源码数组函数解析(五)fill、baseFill、findIndex、baseFindIndex、baseIteratee、findLastIndex
-
JavaScript实用库:Lodash源码数组函数解析(四)dropRight、dropWhile、dropRightWhile、baseWhile
-
JavaScript实用库:Lodash源码数组函数解析(六)first、flatten、flattenDeep、flattenDepth、baseFlatten、isFlattenable
-
JavaScript实用库:Lodash源码数组函数解析(八)initial、join、last、nth、baseNth、(isIndex)
-
JavaScript实用库:Lodash源码数组函数解析(十一)without以及很多我没详戏记细过的