C算法编程题(二)正螺旋
前言
上一篇《C算法編程題(一)撲克牌發(fā)牌》
寫東西前總是喜歡吐槽一些東西,還是多啰嗦幾句吧,早上看了一篇博文《談?wù)勍馄鬂q工資那些事》,里面樓主講到外企公司包含的五類人,其實(shí)不只是外企如此,私企和合資的都是如此,一些公司反正什么人都有,就怕你的上司是第一種,你的同事是第二種。這種搭配最討人厭,反正技術(shù)和工作效率不怎么樣,“做人”還蠻會(huì)做的。其實(shí)不管公司怎樣,同事怎樣,工作環(huán)境怎樣。就像里面樓主說的,都要堅(jiān)持自己選擇的路,并堅(jiān)持走下去。。。
這幾天都在博園逛一些技術(shù)大牛的博客,也買了本相關(guān)的數(shù),在博園主要看些設(shè)計(jì)模式之類的,看了很是心血澎湃,真的希望自己有一天也可以寫一些之類的文章。昨天下了一位園友寫的一個(gè)權(quán)限管理系統(tǒng),里面用到了mvc、ef、easyui和一些設(shè)計(jì)模式,自己接下來要好好研究下。其實(shí)一直有個(gè)想法是,希望可以把.net底層搞透,并整理一套屬于自己的框架,慢慢優(yōu)化下去,就像胡哥一樣。完成這些,雖死無憾,哈哈哈。。。
說的有點(diǎn)多了,會(huì)到正題,我一開始寫這類算法編程題的時(shí)候,一是想可以幫到開始學(xué)習(xí)算法編程的同學(xué)們,二是鍛煉自己的腦細(xì)胞,希望死的不要太多。還有就是寫這些編程題和C++其實(shí)沒什么關(guān)系,只是用簡(jiǎn)單的語法實(shí)現(xiàn)功能而已,重要的是邏輯思路,大家也可以看成是奧數(shù)題。
網(wǎng)上看到一套趣味編程題,希望接下來可以一一和大家分享。
程序要求
程序描述:
從鍵盤輸入一個(gè)整數(shù)(1~20)
?? ?則以該數(shù)字為矩陣的大小,把1,2,3…n*n 的數(shù)字按照順時(shí)針螺旋的形式填入其中。例如:
?? ?輸入數(shù)字2,則程序輸出:
?? ?1 2
?? ?4 3
?? ?輸入數(shù)字3,則程序輸出:
?? ?1 2 3
?? ?8 9 4
?? ?7 6 5
?? ?輸入數(shù)字4, 則程序輸出:
?? ? 1?? 2?? 3? 4
?? ?12? 13? 14? 5
?? ?11? 16? 15? 6
?? ?10?? 9?? 8? 7
程序?qū)崿F(xiàn)
這個(gè)編程題大家可能都做過,算是比較經(jīng)典的算法編程題了,當(dāng)然也有很多的實(shí)現(xiàn)方法,這里我講一種。
我們先分析下,這個(gè)題目主要是輸出數(shù)字螺旋,我們可以看成是四個(gè)方向:
1,左-->右
2,上-->下
3,右-->左
4,下-->上
而且這四個(gè)方向的數(shù)字是依次遞增的,那我們可以這樣思考,整個(gè)輸出是一個(gè)二維數(shù)組,行和列數(shù)是一樣的,比如輸入4,那1-12就是第一圈,12-16就是第二圈,每一圈又分四個(gè)方向。
我們可以先這樣定義:
1 int num[80][80]; 2 int i,j; 3 int rows,quan;num數(shù)組表示的是輸出的數(shù)組,rows就是行列數(shù),也就是我們輸入的值,quan表示的是螺旋的圈數(shù),i表示的是螺旋上的數(shù)字,j等下我們程序中講,我們代碼可以這樣寫:
1 scanf("%d",&rows); 2 quan=0; 3 for(i=1;i<=rows*rows;quan++) 4 { 5 if(i==rows*rows) 6 num[(rows-1)/2][(rows-1)/2]=i++; 7 else 8 { 9 for(j=quan;j<rows-1-quan;j++) 10 num[quan][j]=i++; 11 for(j=quan;j<rows-1-quan;j++) 12 num[j][rows-quan-1]=i++; 13 for(j=rows-1-quan;j>quan;j--) 14 num[rows-quan-1][j]=i++; 15 for(j=rows-1-quan;j>quan;j--) 16 num[j][quan]=i++; 17 } 18 }最外層的for是循環(huán)圈數(shù)的意思,里面if是判斷最后一圈是不是單獨(dú)的數(shù)字,就像行數(shù)如果是3,那最后一圈就只要一個(gè)數(shù)字9,下面四個(gè)for就是代表的上面說的四個(gè)方向。大家看下代碼就懂得,這里我就不多說了。
大家可能有更好的實(shí)現(xiàn)方式,希望可以多多交流,
完整程序代碼:
1 #include "stdio.h" 2 #include "string.h" 3 #include "stdlib.h" 4 5 void main() 6 { 7 int num[80][80]; 8 int i,j; 9 int rows,quan; 10 11 scanf("%d",&rows); 12 quan=0; 13 for(i=1;i<=rows*rows;quan++) 14 { 15 if(i==rows*rows) 16 num[(rows-1)/2][(rows-1)/2]=i++; 17 else 18 { 19 for(j=quan;j<rows-1-quan;j++) 20 num[quan][j]=i++; 21 for(j=quan;j<rows-1-quan;j++) 22 num[j][rows-quan-1]=i++; 23 for(j=rows-1-quan;j>quan;j--) 24 num[rows-quan-1][j]=i++; 25 for(j=rows-1-quan;j>quan;j--) 26 num[j][quan]=i++; 27 } 28 } 29 30 for(i=0;i<rows;i++) 31 { 32 for(j=0;j<rows;j++) 33 { 34 printf("%4d",num[i][j]); 35 } 36 printf("\n"); 37 } 38 } View Code運(yùn)行結(jié)果:
?
轉(zhuǎn)載于:https://www.cnblogs.com/xishuai/p/3398799.html
總結(jié)
以上是生活随笔為你收集整理的C算法编程题(二)正螺旋的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器磁盘操作系统双机软件集成,实战:R
- 下一篇: 如何停止运行在服务器的项目,怎么启动和停