标签:中心 color 大小 一段 代码 简单 std alt div
不说废话,先上图
。
实现这个目标,可以把数字想像成一条蛇,蛇爬过的数字就加一。把二维数组[y][x]作为地图,y为纵轴,x为横轴。通过改变蛇的坐标让它爬起来(是不是很像贪吃蛇)。!!先上总代码:
#include <stdio.h> //地图(数组)和坐标位置 int map[100][100]; int x = 0, y = 0; //蛇的前进方向(步数) void up(int); void down(int); void left(int); void right(int); //蛇走一步留下一个数字 int num = 0; void up(int step) { int i; for(i=0;i<step;i++)//向上走多少步数 { num++; map[y--][x] = num; } } void down(int step) { int i; for (i = 0; i < step; i++)//向下走多少步数 { num++; map[y++][x] = num; } } void left(int step) { int i; for (i = 0; i < step; i++)//向左走多少步数 { num++; map[y][x--] = num; } } void right(int step) { int i; for (i = 0; i < step; i++)//向右走多少步数 { num++; map[y][x++] = num; } } int main() { //自定义矩阵大小n*n int size; printf("请输入你想要的矩阵边长大小(n):"); scanf("%d",&size); //蛇开始爬动 int step; if(size%2==1)//size为奇数 { for(step=size-1;step>0;step-=2){ right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 } //最后蛇再爬到中心位置 int middle=(size-1)/2; map[middle][middle]=++num; } if(size%2==0)//size为偶数 { for(step=size-1;step>0;step-=2){ right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 } } //打印出效果 int i,j; for (i = 0;i < size; i++) { for (j = 0; j < size; j++) { printf(" %3d ", map[i][j]); } printf("\n"); printf("\n"); } return 0; }
这些都挺简单的对吧,关键是怎么让蛇在我们希望时调头。在这我想先说说我发现的一些规律:
(9^2-1)/4=20=2+4+6+8; 10^2/4=25=1+3+...+9;
(11^2-1)/4=120=2+4+...+10; 12^2/4=36=1+3+...+11;
对于奇数(a^2-1)/4=2+4+...+(a-1); 对于偶数(b^2)/4=1+3+...+(b-1);
也许你会说这有什么用,别急,好戏还在后头。
我们要围成n*n的正方形矩阵,正方形有4条边,正好对应上面的除以4,所以,你懂我意思把。
以10*10为例,第一层每边走9步,第二层7步,第三层5步,第四层3步,第五层1步,这样就刚好把整个地图走完。
这是不是和10^2/4=25=1+3+...+9很像。
对应如图:
这样我们就可以把每条边分成4段,走完一段后蛇就调头,一直爬到终点。
有一点要注意的是,对于偶数的平方都能被4整除,蛇完整的走完循环。所以:
if(size%2==0)//size为偶数 { for(step=size-1;step>0;step-=2){ right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 } }
而对于奇数,平方后中间会剩下一个点。为了把它填满,奇数就是这样:
if(size%2==1)//size为奇数 { for(step=size-1;step>0;step-=2){ right(step); down(step); left(step); up(step); x++,y++;//走完一圈后,从右边第一格再走 } //最后蛇再爬到中心位置 int middle=(size-1)/2; map[middle][middle]=++num; }
最后希望我的方法能多少让你有些想法,谢谢。
标签:中心 color 大小 一段 代码 简单 std alt div
原文地址:https://www.cnblogs.com/studyshare777/p/11618664.html