C算法編程題(二)正螺旋

前言

  上一篇《C算法編程題(一)撲克牌發牌》

  寫東西前總是喜歡吐槽一些東西,還是多啰嗦幾句吧,早上看了一篇博文《談談外企漲工資那些事》,里面樓主講到外企公司包含的五類人,其實不只是外企如此,私企和合資的都是如此,一些公司反正什么人都有,就怕你的上司是第一種,你的同事是第二種。這種搭配最討人厭,反正技術和工作效率不怎么樣,“做人”還蠻會做的。其實不管公司怎樣,同事怎樣,工作環境怎樣。就像里面樓主說的,都要堅持自己選擇的路,并堅持走下去。。。

  這幾天都在博園逛一些技術大牛的博客,也買了本相關的數,在博園主要看些設計模式之類的,看了很是心血澎湃,真的希望自己有一天也可以寫一些之類的文章。昨天下了一位園友寫的一個權限管理系統,里面用到了mvc、ef、easyui和一些設計模式,自己接下來要好好研究下。其實一直有個想法是,希望可以把.net底層搞透,并整理一套屬于自己的框架,慢慢優化下去,就像胡哥一樣。完成這些,雖死無憾,哈哈哈。。。

  說的有點多了,會到正題,我一開始寫這類算法編程題的時候,一是想可以幫到開始學習算法編程的同學們,二是鍛煉自己的腦細胞,希望死的不要太多。還有就是寫這些編程題和C++其實沒什么關系,只是用簡單的語法實現功能而已,重要的是邏輯思路,大家也可以看成是奧數題。

  網上看到一套趣味編程題,希望接下來可以一一和大家分享。

程序要求

  程序描述:

  從鍵盤輸入一個整數(1~20)
?? ?則以該數字為矩陣的大小,把1,2,3…n*n 的數字按照順時針螺旋的形式填入其中。例如:
?? ?輸入數字2,則程序輸出:
?? ?1 2
?? ?4 3
?? ?輸入數字3,則程序輸出:
?? ?1 2 3
?? ?8 9 4
?? ?7 6 5
?? ?輸入數字4, 則程序輸出:
?? ? 1?? 2?? 3? 4
?? ?12? 13? 14? 5
?? ?11? 16? 15? 6
?? ?10?? 9?? 8? 7

程序實現

  這個編程題大家可能都做過,算是比較經典的算法編程題了,當然也有很多的實現方法,這里我講一種。

  我們先分析下,這個題目主要是輸出數字螺旋,我們可以看成是四個方向:

  1,左-->右

  2,上-->下

  3,右-->左

  4,下-->上

  而且這四個方向的數字是依次遞增的,那我們可以這樣思考,整個輸出是一個二維數組,行和列數是一樣的,比如輸入4,那1-12就是第一圈,12-16就是第二圈,每一圈又分四個方向。

  我們可以先這樣定義:

1     int num[80][80];
2     int i,j;
3     int rows,quan;

  num數組表示的是輸出的數組,rows就是行列數,也就是我們輸入的值,quan表示的是螺旋的圈數,i表示的是螺旋上的數字,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是循環圈數的意思,里面if是判斷最后一圈是不是單獨的數字,就像行數如果是3,那最后一圈就只要一個數字9,下面四個for就是代表的上面說的四個方向。大家看下代碼就懂得,這里我就不多說了。

  大家可能有更好的實現方式,希望可以多多交流,

  完整程序代碼:

 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

  運行結果:

?

轉載于:https://www.cnblogs.com/xishuai/p/3398799.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273958.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

同時獲取同一等級下多個class值的節點的方法

方法&#xff1a; tr_ soup.find("div", class_"mod_cont fcolor30").find_all("tr", attrs{"class":["md_tr font14 bgcolor-s","md_tr font14 bgcolor"]}) 同時獲取兩個不同的class.例如&#xff1a; 當Beauti…

【循序漸進學Python】6.Python中的函數

1. 創建函數 一個函數代表一個行為并且返回一個結果(包括None)&#xff0c;在Python中使用def關鍵字來定義一個函數&#xff0c;如下&#xff1a; def hello(name):print hello, name ! 接下來調用函數&#xff0c;并查看其返回值&#xff1a; # output: # hello,gy! # None …

求子數組的最大和

窮舉法&#xff1a; int MaxSubArraySum(int a[], int n) { int i, j, MaxSum 0, tmpSum, cnt; for (i1; i<n; i) { for (j0; ji<n; j) { cnt 0; tmpSum 0; while (cnt < i) { tmpSum a[jcnt]; cnt; } if (MaxSum < tmpSum) { MaxSum tmpSum; } } } return Ma…

scrapy框架-post使用

scrapy中使用FormRequest向網頁提交數據 Scrapy post使用 如何post data&#xff1a; http://httpbin.org/post FormRequest : post請求 GitHub Login 借助瀏覽器分析登陸行為。 分析post的內容先嘗試一次錯誤的登陸&#xff1a;如下&#xff1a;分析&#xff1a;需要post…

duilib進階教程 -- 改進窗口拖動 (12)

現在大家應該都知道caption"0,0,0,32"&#xff0c;是指示標題欄區了吧&#xff0c;如果想要整個窗口都能拖動呢&#xff1f; 那直接把高度改成和窗口一樣不就得了~O(∩_∩)O~ 嗯&#xff0c;這樣是可以&#xff0c;比如窗口高度是600&#xff0c;那么我們指定caption…

python- 基礎 range方法的使用

1、第一種用法 index[1,2,0,5,9,8,10,6,4,7] for i in range(len(index)): print(index[i]) 結果&#xff1a; λ py test.py 1 2 0 5 9 8 10 6 4 7 2、第二種用法&#xff1a; index[1,2,0,5,9,8,10,6,4,7] for i in range(0,len(index),2): print(index[i]) 運…

Oracle行列轉換小結

目錄結構如下&#xff1a;行轉列列轉行[一]、行轉列 1.1、初始測試數據 表結構&#xff1a;TEST_TB_GRADE Sql代碼 create table TEST_TB_GRADE ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE FLOAT ) 初始…

python- 進階 與flask的搭配使用---定時任務框架APScheduler學習詳解

APScheduler簡介 在平常的工作中幾乎有一半的功能模塊都需要定時任務來推動&#xff0c;例如項目中有一個定時統計程序&#xff0c;定時爬出網站的URL程序&#xff0c;定時檢測釣魚網站的程序等等&#xff0c;都涉及到了關于定時任務的問題&#xff0c;第一時間想到的是利用ti…

Mingw下g++編譯執行順序錯誤

今天寫一個簡單的線性表時&#xff0c;用Mingw中的g編譯、調試、運行時發現一個奇怪的現象&#xff1a;程序的執行順序與實際編寫順序不一致。 編譯環境&#xff1a;代碼編寫 win7下 editplus Mingw 4.3.3 g 代碼片段如下&#xff1a; 1 //function: create a list 2 //ti…

python系統學習1-程序設計的基本方法

一、程序設計基本方法 計算機與程序設計 編譯和解釋 程序的基本編寫方法 計算機編程 1、計算機與程序設計 &#xff08;1&#xff09;、計算機是根據指令操作數據的設備 功能性&#xff1a;對數據的操作、表現為數據計算、輸出輸入處理和結果存儲。 可編程性&#xff1a;…

python 系統學習實例1.1 - 華氏度與攝氏度的轉換

# C ( F - 32 ) / 1.8???????????????????????????????????????????????????????????????????????????????? # F C * 1.8 32?????????????????????????????…

EMS問題

如果EMS啟動后在運行時報出 JMS error: "Not allowed to create destination這個錯誤&#xff0c;可能就是你啟動方式的問題了進入到EMS的安裝目錄的bin目錄下&#xff0c;運行tibemsca.bat那個文件就好使了。轉載于:https://www.cnblogs.com/xiaotianyu/p/3421737.html

python 系統學習實例1.2 - 人民幣與美元的轉換

# RMB USD / 6.78???????????????????????????????????????????????????????????????????????????????? # USD RMB* 6.78 def tempConvert(): t input("請輸入數值:") …

HDTV(1920x1080)碼率和視頻質量關系的研究 2 (實驗結果)

上一篇文章中介紹了實驗的準備工作&#xff0c; HDTV&#xff08;1920x1080&#xff09;碼率和視頻質量關系的研究 1 &#xff08;前期準備&#xff09; 本文介紹一下實驗的結果。 首先來看一下主觀評價的試驗結果&#xff1a; 從實驗結果來看&#xff0c;可以得出以下結論&…

python爬蟲--如何爬取翻頁url不變的網站

參考 https://blog.csdn.net/c350577169/article/details/80410133

POJ 1745 Divisibility DP

POJ:http://poj.org/problem?id1745 A完這題去買福鼎肉片&#xff0c;和舍友去買滴~舍友感慨“這一天可以賣好幾百份&#xff0c;每份就算賺一塊錢。。那么一個月。。一年。。。” 我說“那我們以后去賣這個吧&#xff0c;餓了還能自己煮著吃” 哈哈&#xff0c;一群天真的少…

NGUI如何創建自己的精靈圖集

說實話其實很簡單,但是在不知道的情況下真的不好弄啊. 1. 選擇你要制作精靈圖集的圖片,可以選擇多張 2. 提倡使用快捷鍵Alt Shift M 會有如下窗口彈出,也可以NGUI --> Open-->Atlas Maker打開 我們看到在Sprites里面就是我們選擇的要制作圖集的圖片 當在Replace后面的輸…

C++ - 進階 1002

This time, you are supposed to find AB where A and B are two polynomials. Input Specification: Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N?1?? a?N?1???? N?2??…

修改6S Fortran77 代碼,建立查找表

逐像元大氣校正&#xff0c;常預先計算查找表&#xff08;LUT&#xff0c;LookUp Tabel&#xff09;&#xff0c;6S大氣輻射傳輸模式也可以用來計算LUT。但6S源程序輸出信息多&#xff0c;且浮點數輸出精度低&#xff0c;不利于提取關鍵信息生成LUT&#xff0c;本文描述了怎樣修…

c++ 實例

#include "stdafx.h" #include <iostream> using namespace std; int main() { int a; a 4; cout<<a<<endl; return 0; }