输出下面的n(3<=n<=19)阶螺旋矩阵。输入n(=5),输出如下左图所示的螺旋矩阵。输入-n(=-5),输出如下右图所示的螺旋矩阵。

顺时针右旋
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
逆时针左旋
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9

输入格式

输入一个整数n或(-n),n表示要输出的螺旋矩阵的阶数。

输出格式

输出右旋或左旋n阶螺旋矩阵。

代码块:

/*思路:
因为矩阵是4条边,每条边的循环次数依次为:n, n-1, n-1, n-2, n-2, ... 2, 2, 1, 1
所以,以4位循环次数为一组,能判断出大循环需要的次数为多少,根据奇数边和偶数边的不同,
大循环次数分别为:奇数边/2+1,偶数边/2。4位循环一组的顺序是:
1.行号不变,列号增加。
2.列号不变,行号增加
3.行号不变,列号减少。
4.列号不变,行号减少。例:5阶矩阵,每边循环次数:5, 4, 4, 3, 3, 2, 2, 1, 1。
分组:{5, 4, 4, 3}, {3, 2, 2, 1}, {1}
大循环为5/2+1=3。
可以看出大循环分组内的每条边的循环次数是以每次减少2,逐渐递减*/#include <stdio.h>
#include <stdlib.h>
#include <math.h>void input(int *num, int *sign);
void judge(int **arr, int *num, int *sign);
void output(int **arr, int *num);
void rightSpiral(int **arr, int *num);
void leftSpiral(int **arr, int *num);void input(int *num, int *sign)
{printf("请输入阶数: ");scanf_s("%d", num);while(*num<-19||(*num>-3&&*num<3)||*num>19){printf("阶数超出范围([-19, -3], [3, 19]),请重新输入: ");scanf_s("%d", num);}/*以下是为了把负数取绝对值,变成正数,以便用于循环次数,同时用sign保留正负号,用于判断函数*/*sign=*num;double dnum=(double)(*num);*num=(int)fabs(dnum);
}//input
void judge(int **arr, int *num, int *sign)
{if(*sign>0)rightSpiral(arr, num);elseleftSpiral(arr, num);
}//judge
void output(int **arr, int *num)
{int i, j;printf("\n输出结果为:\n");for(i=0; i<*num; i++){for(j=0; j<*num; j++)printf("%3d ", arr[i][j]);printf("\n");}
}//output
void rightSpiral(int **arr, int *num)
{int loop1, loop2, loop3, loop4;int nA, nB, nC, nD;                     //每条边的循环次数int i, j, k, numb=1;                    //k为大循环次数if(*num%2==0)k=*num/2;elsek=*num/2+1;for(i=0, j=-1, nA=*num, nB=*num-1, nC=nB, nD=nC-1; k>0; nA-=2, nB-=2, nC-=2, nD-=2, k--){for(loop1=0, j++; loop1<nA; j++, loop1++)arr[i][j]=numb++;j--;for(loop2=0, i++; loop2<nB; i++, loop2++)arr[i][j]=numb++;i--;for(loop3=0, j--; loop3<nC; j--, loop3++)arr[i][j]=numb++;j++;for(loop4=0, i--; loop4<nD; i--, loop4++)arr[i][j]=numb++;i++;}
}//rightSpiral
void leftSpiral(int **arr, int *num)
{int loop1, loop2, loop3, loop4;int nA, nB, nC, nD;int i, j, k, numb=1;if(*num%2==0)k=*num/2;elsek=*num/2+1;for(i=-1, j=0, nA=*num, nB=*num-1, nC=nB, nD=nC-1; k>0; nA-=2, nB-=2, nC-=2, nD-=2, k--){for(loop1=0, i++; loop1<nA; i++, loop1++)arr[i][j]=numb++;i--;for(loop2=0, j++; loop2<nB; j++, loop2++)arr[i][j]=numb++;j--;for(loop3=0, i--; loop3<nC; i--, loop3++)arr[i][j]=numb++;i++;for(loop4=0, j--; loop4<nD; j--, loop4++)arr[i][j]=numb++;j++;}
}int main()
{int i;int *num=(int*)malloc(sizeof(int));int *sign=(int*)malloc(sizeof(int));input(num, sign);int **arr=(int**)malloc(*num*sizeof(int*));for(i=0; i<*num; i++)arr[i]=(int*)malloc(*num*sizeof(int));judge(arr, num, sign);output(arr, num);for(i=0; i<*num; i++)free(arr[i]);free(sign);free(num);system("pause");return 0;
}

解答私信@田田WX //2020-12-30 左右n阶螺旋矩阵相关推荐

  1. 解答私信@田田WX //2022-6-12 C语言 51单片机LED模拟交通灯

    名称:LED模拟交通灯 说明: 东西向绿灯亮若干秒后,黄灯闪烁,闪烁5次后亮红灯, 红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁, 闪烁5次后亮红灯,东西向绿灯亮,如此往复. 本例将时间设得 ...

  2. 【2020.12.30更新】信号处理常用公式(一)

    积化和差 cos⁡αcos⁡β=12[cos⁡(α+β)+cos⁡(α−β)]\cos \alpha \cos \beta = \frac{1}{2}[\cos (\alpha + \beta ) + ...

  3. DayDayUp:2019.12.30吴晓波2020年终秀演讲《预见2020:来海边,拾起信心》读后有感

    DayDayUp:2019.12.30吴晓波2020年终秀演讲<预见2020:来海边,拾起信心>读后有感 导读:2019年,过的好不好?有人豪情万丈,有人强颜欢笑. 互联网平台带来了方便快 ...

  4. 英语积累知识(二) 2020/1/30 2019年12月六级翻译

    英语积累知识(二) 2020/1/30 2019年12月六级翻译 简言:笔者在2019年12月份参加的CET6 的翻译题是"梅花",在这里特将三份试卷的翻译及重点词汇做详解,发现三 ...

  5. STEMA 考试每日一练 2020.12.7 - 2021.11.30 试题及答案 - 刷题

    2020.12.7 在以下几个选项中,正确的从小到大的排序是( ) A 地球<太阳系<可观测宇宙<银河系B 地球<太阳系<银河系<可观测宇宙C 太阳系<地球& ...

  6. 【不忘初心】Win10_20H2_2009_19042.662_X64_六合一_[纯净精简版][2.72G](2020.12.8)

    母版来自MSDN WIN10_20H2.19042.508,集成补到19042.662,20H2相比1909 2004版本要稳定很多,此版修复了上次的一些问题,精简方法基本上还是原来配方,为了保证稳定 ...

  7. 《nature》2020.11.30期,重症COVID-19的主要遗传危险因素来自尼安德特人

    <nature>最新2020.11.30期快报! 1.重症COVID-19的主要遗传危险因素来自尼安德特人 严重COVID-19的风险是由一个遗传自尼安德特人的基因组片段引起的,南亚和欧洲 ...

  8. 2020/7/30 渐入佳境

    2020/07/30 第二次组队赛(模拟) 比赛过程 开始 意外 解决 进入状态 学到的题目 B题 C题 L题 赛后总结反思 比赛过程 开始 集训第4天,中午12:00开始组队赛.开始的时候不知道先做 ...

  9. 1+X Web前端等级考证 | 2020 12月Web前端开发中级实操 (模拟试题第一套) 附答案

    由于经常分享失败,我上传github上了,先放上链接:https://github.com/Lydever/web-1-x.git 请礼貌,不要耍流氓哈哈,创作不易,下载的同时,请start一下,谢谢 ...

最新文章

  1. C语言,分解质因数一个解法!_只愿与一人十指紧扣_新浪博客
  2. Java对象的序列化与反序列化
  3. [Spring]IoC容器之进击的注解
  4. OpenCASCADE:Open CASCADE Application Framework (OCAF)的简介
  5. 医学计算机应用研究的意义,医学图像感兴趣区域的自动提取-计算机应用研究.PDF...
  6. Redhat7 Dell服务器驱动安装(Bin格式)
  7. 微软:PowerShell 命令行工具存在 RCE 漏洞,请尽快修复
  8. 储存服务器装什么系统,存储服务器是什么操作系统
  9. 贺利坚老师汇编课程60笔记:逻辑移位指令shl和shr
  10. android中函数的直接使用用import就可以了吗各种类不用创建对象吗_React Hooks 如何安全地使用state...
  11. 粒子群算法(1)----粒子群算法简单介绍
  12. 屏幕录像专家 EXE视频转MP4
  13. 计算机与英语教学的论文开题报告,英语教学法毕业论文开题报告范文
  14. 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?
  15. 阿里云有奖调查结果公布,赠送10个阿里巴巴logo胸针
  16. 云脉相册检索,关键词快速定位图片
  17. go 变量大写_go语言如何将大写转小写
  18. 计算机主机硬件图片,电脑主机里的各个硬件名称图片用途和使用说明
  19. 零基础必看之数学建模索引
  20. 微信小程序获取昵称,头像

热门文章

  1. C语言中不同格式化输出的含义(%e、%g、%u、%hd)等
  2. 【C#】CheckedListBox控件的用法
  3. JAVA设计模式(21):行为型-迭代器模式(Iterator)
  4. 2021浙江省赛题解(A,C,F,G,J,L,M)
  5. 北邮计算机专硕竞争力,硕士生就业率排行TOP10,北京邮电高居榜首,你的母校上榜了没?...
  6. source insight 安装
  7. 高级openg 混合,一个完整程序
  8. 【微电影视频网站】介绍
  9. Bootstrap使用插件时jQuery.min.js文件的导入方法
  10. 996,绝对不是福气!