螺旋矩阵(C语言实现)- 2016.01.04
来源:互联网 发布:windows 远程桌面 打开 编辑:程序博客网 时间:2024/05/01 04:52
给定一个整数 N , 生成一个 N * N 的矩阵,矩阵中的元素取值为 1 ~ N*N , 1 在左上角,其余各数按顺时针方向旋转前进,依次递增。例如,当 N = 4 时,矩阵的内容如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
则,可以按横(从左到右,即 1 - 4)竖(从上到下,即5 - 6 )横(从右到左 7 - 10 )竖(从下到上 11 - 12),这是一轮计算,其次的计算按这种规则进行递归,具体的代码如下所示:
#include "stdio.h"
#include "stdlib.h" // DEV 中为了使用 system 调用而引入的头文件
#define Max 10000 // 定义 N*N的最大值
int main(int argc,char *argv[])
{
int a[Max] ;
int N=0 , NC , num = 0, n = 1;
printf("请输入参数N:");
scanf("%d",&N); // 即输入的参数
NC = N ; // 由于每计算一次都会使得行数或者列数减 2 ,所以用 N的副本 NC 控制程序的计算次数
while( NC > 0)
{
for(int i = 1 ,j = num + 1; i <= N - num *2 ; i ++,n ++, j ++)
a [ num*N + j] = n ; // 计算第一行,每一次循环第一行的行号会加 1 ,打印的数目会减 2
for(int i = num + 2 ; i <= N - (num+1) ; i ++,n++)
a [ i*N - num] = n ; // 计算右面一列,每一次循环右面一列的起始和终止行号都会减 1
for(int i = N-num , j = 1; j <= N - num*2 ; j ++, n ++)
a [ i * N - j - num + 1] = n ; // 计算最下面一列,每一次循环,最后一行的行号会减 1 ,打印的数目会减 2
for(int i = N-num-2; i>num; i--,n++)
a [i * N+num+1] = n ; // 计算最左面一列,每一次循环左面的一列的起始地址和
if(NC>=2)
NC -= 2;
else // 当输入的参数为奇数时,省去最后一次计算
NC=0;
num ++ ;
}
if( N%2 != 0) //当 N 为奇数时,将省去的最后一次计算填充
a[ (((N-1)/2)*N) + (N+1)/2] = N*N ;
for(int i = 1 ; i <= N*N ; i ++)
{
printf("%d ",a[i]);
if(!(i%N))
printf("\n");
}
system("pause"); // 由于在 dev 中最后的终端会直接退出,为了使终端可以停下来让我们观察
return 0 ;
}
- 螺旋矩阵(C语言实现)- 2016.01.04
- 螺旋矩阵C语言实现
- 螺旋矩阵(c语言实现)
- PAT Basic 1050. 螺旋矩阵(25)(C语言实现)
- 螺旋矩阵(c实现)
- c语言(螺旋矩阵)2017.4.23
- 向内的螺旋矩阵(C语言)
- C语言输出螺旋矩阵
- C语言生成螺旋矩阵
- 螺旋矩阵的C实现
- HLG 1564 螺旋矩阵 (趣味C语言)
- C语言经典题目螺旋矩阵
- C语言生成螺旋矩阵2
- 一起talk C栗子吧(第三十六回:C语言实例--螺旋矩阵)
- [C]回环数(螺旋矩阵)
- [C++] 螺旋矩阵
- C语言实现 螺旋数 方阵
- 螺旋数组的C语言实现
- 自主悬停&高度融合 作者:nieyong
- NDK 错误:Unable to launch cygpath. Is Cygwin on the path
- 死锁避免算法-银行家算法
- java/jsp-向mysql写数据时出现了中文乱码
- SQL多表连接查询以及mysql数据库、sqlserver数据库常见不同点
- 螺旋矩阵(C语言实现)- 2016.01.04
- 请求的链式处理——职责链模式
- 两个栈实现一个队列
- IOS crash atos
- 关系型数据库管理系统简介
- 实例8:状态栏中显示代表登陆状态的图标(实现仿QQ登陆状态显示)
- NDK :Native method not found
- textview加链接
- 类目与扩展