




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#define N 500main()int num,i,j,m,k=1,sNN; printf(请输入一个整数:);scanf(%d,&num); if(num%2=0)m=num/2; /m是矩阵圈数elsem=num/2+1;for(i=0;im;i+) /外层的循环用来控制螺旋方阵的圈数for(j=i;jnum-i;j+) /控制每圈的上行元素的赋值sij=k;k+;for(j=i+1;j=i;j-) /控制每圈的下行的元素的赋值 snum-i-1j=k;k+;for(j=num-2-i;ji;j-) /控制每圈的左列的元素的赋值 sji=k;k+;printf(n矩阵如下图所示:n);for(i=0;inum;i+) /输出矩阵for(j=0;j=0。如图每圈最大值分别是1、9、25、49、81.,算出每圈的max后,就分4条边分别计算每圈的其他值。通过坐标落在该圈4条边的哪条边上,按照不同的公式计算出具体坐标点的值。以第3圈(max=49)为例,4条边划分如下图(以颜色区分):这里先给出4条边上各坐标上的值与max的对应关系为:上边:Utop = max+(x+y);左边: Uleft= max+(3*x-y);下边:Ubottom = max + (-x - 5*y);右边:Uright = max+(-7*x+y);那么这些关系是怎么得出来的呢?再看图中画上圈的数字(将其值表示为topBase,xxBase),我们称其为每条边的基准值:在上边,y坐标不变,x坐标变化步长为1。令x=0,此时,topBase=max+y作为该边的基准值,其他值随x的变化而变化,得在该区域u=max+y+x;同理,在左边,x坐标不变,y坐标变化步长为1。令y=0,此时,u=max+3*x作为该边的基准值,其他值随y的变化而变化,得在该区域u=vc+3*x-y;同理得其他俩区域的表达式。不再赘述。观察这些基准值与max值之间关系,不难发现,这些基准值与max之间的差分别是1C(上边),3C(左边),5C(下边),7C(右边)(C表示当前圈数),在上边和下边,y坐标表示(或等于)圈数(即C=y),而在左边和右边,x坐标表示(或等于)圈数(即C=x)。因此前面提到的差值又可用坐标表示成1y,3x,5y,7x。因此就产生了各边基准值的计算公式:topBase=max+yleftBase=max+3xbottomBase=max-5yrightBase=max-7x(注意坐标的符号,负数加,正数减,因为基准值肯定都比max要小) 下面得出每条边的值,首先考虑上边和下边,这2条边,在基准值的基础上,由x坐标控制增减,因此:topValue=topBase+x=max+y+x(上边,随x赠而赠,因此是加x)bottomValue=bottomBase-x=max-5y-x(下边,随x赠而减,因此是减x)同理,左边和右边,则在基准值的基础上,由y坐标控制增减,因此:leftValue=leftBase-y=max+3x-y(左边,随y赠而减,因此是减y)rightValue=rightBase+y=max-7x+y(右边,随y赠而赠,因此是加y)程序实现#include Void spiral(int x, int y) int c = max0(abs0(x), abs0(y);/ 当前坐标所在圈 int max1 = (c * 2 + 1) * (c * 2 + 1);/ 当前圈上最大值 if (y = -c) / 上边 return max1 + (x + y); else if (x = -c) / 左边 return max1 + (3 * x - y); else if (y = c) / 下边 return max1 + (-x - 5 * y); else / 右边 Return1 max + (-7 * x + y); int max0(int n1, int n2) return n1 n2 ? n1 : n2; int abs0(int x) return x 0 ? x : -x; main(String args) for (int y = -5; y = 5; +y) for (int x = -5; x = 5; +x) printf(%5d, spiral(x, y); printf(); 82 81 80 79 78 77 76 75 74 7383 50 49 48 47 46 45 44 43 7284 51 26 25 24 23 22 21 42 7185 52 27 10 9 8 7 20 41 7086 53 28 11 2 1 6 19 40 6987 54 29 12 3 4 5 18 39 6888 55 30 13 14 15 16 17 38 6789 56 31 32 33 34 35 36 37 6690 57 58 59 60 61 62 63 64 6591 92 93 94 95 96 97 98 99 100*/看到这个方阵,一想到的就是找规律。这个题目规律只有两个 转圈 自加/转圈就要给数组元素定位,主要做的工作就是找规律然后根据规律用for简化,然后再赋值。/如果把一圈当作一个循环的话,那整体循环N/2次#include using namespace std;int main()const int N=10;/这个就不说了/先建立一个二维数组int aNN;/为了观察运行出的错,先把数组各个元素通通赋为0吧,这样一来,有什么错误在运行时候,一看就能看出来。for(int i=0;iN;i+)for(int j=0;jN;j+)aij=0;/试了一下从1赋值,感觉很费事,还是从后往前推吧,最后一个数字是N*Nint last=N*N;int n=N; /中间变量。int i=n-1,j;/第一个循环要用到i(第54行),所以赋个初值for(int k=0;kk;j-)/给100-92赋值aij=last-;for(i=n-1;ik;i-)/给91-83赋值aij=last-;for(;jn-1;j+) /给82-74赋值aij=last-;for(;in-1;i+) /给73-65aij=last-;/最外面的一圈赋值完成了,进行下一圈。n-;i-;/显示数组各个元素for(int i=0;iN;i+)for(int j=0;jN;j+)coutaijt;if(j=N-1) /这要注意换行。coutendlendl;return 0;/code82 81 80 79 78 77 76 75 74 7383 50 49 48 47 46 45 44 43 7284 51 26 25 24 23 22 21 42 7185 52 27 10 9 8 7 20 41 7086 53 28 11 2 1 6 19 40 6987 54 29 12 3 4 5 18 39 6888 55 30 13 14 15 16 17 38 6789 56 31 32 33 34 35 36 37 6690 57 58 59 60 61 62 63 64 6591 92 93 94 95 96 97 98 99 100*/看到这个方阵,一想到的就是找规律。这个题目规律只有两个 转圈 自加/转圈就要给数组元素定位,主要做的工作就是找规律然后根据规律用for简化,然后再赋值。/如果把一圈当作一个循环的话,那整体循环N/2次#include using namespace std;int main()const int N=10;/这个就不说了/先建立一个二维数组int aNN;/为了观察运行出的错,先把数组各个元素通通赋为0吧,这样一来,有什么错误在运行时候,一看就能看出来。for(int i=0;iN;i+)for(int j=0;jN;j+)aij=0;/试了一下从1赋值,感觉很费事,还是从后往前推吧,最后一个数字是N*Nint last=N*N;int n=N; /中间变量。int i=n-1,j;/第一个循环要用到i(第54行),所以赋个初值for(int k=0;kk;j-)/给100-92赋值aij=last-;for(i=n-1;ik;i-)/给91-83赋值aij=last-;for(;jn-1;j+) /给82-74赋值aij=last-;for(;in-1;i+) /给73-65aij=last-;/最外面的一圈赋值完成了,进行下一圈。n-;i-;/显示数组各个元素for(int i=0;iN;i+)for(int j=0;jN;j+)coutaijt;if(j=N-1) /这要注意换行。coutendlendl;return 0;#include #includevoid main()int i,j,n,number=1,a3030;printf(Please input a number N:);scanf(%d,&n);for(i=0;i=n/2;i+) /控制总共有几个顺时针螺旋fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 面向下颌骨骨折的YOLOv5检测模型研究
- 人口收缩背景下东北黑土区县域土地利用多功能演变与优化研究
- 电解铜箔组织调控及微细粗化工艺探究
- IT企业项目经理工作职责与考核标准
- 阳姜汤治疗上热下寒型寻常性痤疮的临床疗效观察
- 放射源使用安全分类及管理手册
- 银行业务合规管理工作实施意见
- 初中数学教师面试说课课件
- 标准肉牛养殖合作协议模板
- 第3课 文字排版巧设计说课稿-2025-2026学年初中信息技术鲁教版新版2018第3册-鲁教版2018
- 环境因素识别与风险评价培训课件
- 2025北京大兴区旧宫镇红星派出所流动人口和出租房屋管理员招录1人考前自测高频考点模拟试题及答案详解(全优)
- 老年人防诈安全培训内容课件
- 磷化工复工安全培训总结课件
- 2025年党建知识应知应会测试题库(附答案)
- 2025年4月自考02204经济管理试题及答案
- 肺癌患者随访服务记录表
- 高三班主任经验交流课件
- 小学英语三年级上册全册课件
- 系统生物学-第三讲-转录组学课件
- 加州旅馆原版吉他谱(完整版)
评论
0/150
提交评论