C語言——螺旋矩陣(注釋詳解)

一、前言:

????????螺旋矩陣是指一個呈螺旋狀的矩陣,它的數字由第一行開始到右邊不斷變大,向下變大,向左變大,向上變大,如此循環。

?

二、市面解法(較難理解,代碼長度短):

根據階數算出循環的輪數,順時針輸出一圈為一輪,在每一輪里面用四個for循環控制輸出方向?

#include<stdio.h>
int main(){int i;//控制輪數 int j;//控制坐標 int k=1;//k從1加到n*n int m;//輪數 int n;//階數 scanf("%d",&n);//輸入階數 int matrix[n][n];//為n*n的矩陣開辟空間 //計算循環輪數 if(n%2==0){m=n/2;}else{m=n/2+1;}for(i=0;i<m;i++){//m輪順時針圈 for(j=i;j<n-i;j++){//向右輸出 matrix[i][j]=k++;}//注意:從i+1開始遞增,即往下挪一位才是下一個數for(j=i+1;j<n-i;j++){//向下輸出 matrix[j][n-i-1]=k++;} for(j=n-i-2;j>=i;j--){//向左輸出 matrix[n-i-1][j]=k++;}for(j=n-i-2;j>=i+1;j--){//向上輸出 matrix[j][i]=k++;}}//輸出螺旋矩陣 for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%-4d",matrix[i][j]);}printf("\n");//這里記得換行 }return 0;
} 

三、暴力解法(較易理解,代碼長度長) :

思路簡單,即碰到邊界就換方向輸出

#include<stdio.h>
int main(){int n;//輸出n*n的矩陣 int i;//控制行 int j;//控制列 int k=1;//k控制輸入的數從1加到n*n int flag=1;//記號,1表示向右,2表示向下,3表示向左,4表示向上 scanf("%d",&n);//輸入n //建立矩陣,在內存分配能保存n*n個整數的連續的內存空間 int matrix[n][n];//劃分邊界,讓矩陣中的每一個數據都為-1,方便后續判斷越界 for(i=0;i<n;i++){for(j=0;j<n;j++){matrix[i][j]=-1;}}//自此,i和j完成了使命,重新初始化i和j,完成新的任務 i=0;j=0;while(k<=n*n){//k從1加到n*n結束循環,填充完畢 if(matrix[i][j]==-1){//如果等于-1說明還未填充 matrix[i][j]=k++;//k自增,填充 }if(flag==1){//向右填充 j++;//行不變,列加1,實現向右填充 //檢測邊界,如果j==n或該元素不為-1,說明越界了 if(j==n||matrix[i][j]!=-1){j--;//越界了的列再減回去 flag=2;//到了邊界換方向填充 }}else if(flag==2){//向下填充 i++;//行加1,列不變,實現向下填充 //檢測邊界,如果i==n或該元素不為-1,說明越界了 if(i==n||matrix[i][j]!=-1){i--;//越界了的行再減回去 flag=3;//到了邊界換方向填充}}else if(flag==3){//向左填充 j--;//行不變,列減1,實現向左填充//檢測邊界,如果j==n或該元素不為-1,說明越界了 if(j==n||matrix[i][j]!=-1){j++;//越界了的列再加回去 flag=4;//到了邊界換方向填充}}else if(flag==4){//向上填充 i--;//行減1,列不變,實現向上填充 //檢測邊界,如果i==n或該元素不為-1,說明越界了if(i==n||matrix[i][j]!=-1){i++;//越界了的行再加回去flag=1;//到了邊界換方向填充}}}//輸出螺旋矩陣 for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%-4d",matrix[i][j]);}printf("\n");//這里記得換行 }return 0;
}

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

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

相關文章

【ARMv8 SIMD和浮點指令編程】浮點數據轉換指令——數據類型互轉必備

浮點數據轉換指令包括不同的浮點精度數之間的轉換,還包括整型和浮點數之間的轉化。 在了解數據轉換指令前,必須學習 IEEE 754 定義的五種舍入規則。前兩條規則舍入到最接近的值,其他的稱為定向舍入: 舍入到最接近的值 Round to nearest, ties to even – rounds to the n…

Python 多線程和多進程并發執行

Python 多線程和多進程并發執行 引言多線程主要特點和概念多線程的使用threading 模塊concurrent.futures 線程池 多進程主要特點和概念&#xff1a;多進程的使用&#xff1a;multiprocessing 模塊concurrent.futures 進程池 選擇合適的進程數 總結I/O 密集型任務CPU 密集型任務…

js過濾的方法示例

以下是幾個常用的 JavaScript 過濾方法示例&#xff1a; filter() filter() 方法創建一個新的數組&#xff0c;其中包含通過測試函數的所有元素。該方法不會改變原始數組。 const numbers [1, 2, 3, 4, 5]; const filteredNumbers numbers.filter(num > num > 3); c…

銷售技巧培訓之如何提高建材銷售技巧

建材銷售市場競爭也日趨激烈。在這個充滿挑戰與機遇的市場中&#xff0c;掌握一定的銷售技巧對于一個建材銷售人員來說至關重要。本文將結合實際案例&#xff0c;探討一些實用的建材銷售技巧&#xff0c;幫助你更好地拓展業務。 一、了解客戶需求 在銷售過程中&#xff0c;首先…

sql2005日志文件過大如何清理

由于安裝的時候沒有計劃好空間&#xff0c;默認裝在系統盤&#xff0c;而且又沒有做自動備份、截斷事務日志等&#xff0c;很快LDF文件就達到十幾G&#xff0c;或者幾十G &#xff0c;此時就不得不處理了。 備份和計劃就不說了&#xff0c;現在就說下怎么把它先刪除吧&#xf…

【深度學習】一維數組的 K-Means 聚類算法理解

剛看了這個算法&#xff0c;理解如下&#xff0c;放在這里&#xff0c;備忘&#xff0c;如有錯誤的地方&#xff0c;請指出&#xff0c;謝謝 需要做聚類的數組我們稱之為【源數組】 需要一個分組個數K變量來標記需要分多少個組&#xff0c;這個數組我們稱之為【聚類中心數組】…

mysql中count(*)、count(1)、count(主鍵)、count(字段)的區別

文章目錄 count函數的語義count(主鍵)count(1)count(*)count(字段)替代方案explain或者show table status中間表或者其他數據庫計數 以下分析都是基于 select count(?) from table 這個語句來分析&#xff0c;不帶過濾條件。 count函數的語義 count() 是一個聚合函數&#x…

BFC(Block Formatting Contexts)塊級格式化上下文

塊格式化上下文&#xff08;block formatting context&#xff09; 是頁面上的一個獨立的渲染區域&#xff0c;容器里面的子元素不會在布局上影響到外面的元素。它是決定塊盒子的布局及浮動元素相互影響的一個因素。 下列情況將創建一個塊格式化上下文&#xff1a; 使用float…

阿里云輕量應用服務器與云服務器ECS對比

與云服務器ECS相比&#xff0c;輕量應用服務器使用門檻較低&#xff0c;配置簡便&#xff0c;能讓您快速上手并部署簡單的應用或網站&#xff0c;更適合個人開發者、學生等用戶。本文介紹輕量應用服務器與云服務器ECS的特點和區別。 產品對比 輕量應用服務器與云服務器ECS的產…

IO多路轉接之select

IO多路轉接之select 1. IO多路轉接&#xff08;復用&#xff09;2. select2.1 函數原型2.2 細節描述 3. 并發處理3.1 處理流程3.2 通信代碼 原文鏈接 1. IO多路轉接&#xff08;復用&#xff09; IO多路轉接也稱為IO多路復用&#xff0c;它是一種網絡通信的手段&#xff08;機…

算法訓練營Day10(棧和隊列)

理論知識 java語言的棧和隊列。這篇文章總結的不錯 http://t.csdnimg.cn/cOC8q 232.用棧實現隊列 232. 用棧實現隊列 - 力扣&#xff08;LeetCode&#xff09; public class MyQueue {// 3 4// in// out 4 3Stack<Integer> in;Stack<Integer> out;public My…

C# 計算兩個日期的相差天數

string str1 "2017-2-13 23:59:59"; string str2 "2017-2-14 0:00:01"; DateTime d1 Convert.ToDateTime(str1); DateTime d2 Convert.ToDateTime(str2); Console.WriteLine(d1.Date); Console.WriteLine(DateTime.Now);//當前時間 Console.WriteLine(…

【目標檢測算法】IOU、GIOU、DIOU、CIOU

目錄 參考鏈接 前言 IOU(Intersection over Union) 優點 缺點 代碼 存在的問題 GIOU(Generalized Intersection over Union) 來源 GIOU公式 實現代碼 存在的問題 DIoU(Distance-IoU) 來源 DIOU公式 優點 實現代碼 總結 參考鏈接 IoU系列&#xff08;IoU, GIoU…

kubernetes的服務發現(二)

如前面的文章我們說了&#xff0c;kubernetes的服務發現是服務端發現模式。它有一個服務注冊中心&#xff0c;使用DNS作為服務的注冊表。每個集群都會運行一個DNS服務&#xff0c;默認是CoreDNS服務。每個服務都會在這個DNS中注冊。注冊的大致過程&#xff1a; 1、向kube-apise…

WPF使用WebBrowser報腳本錯誤問題處理

前言 WPF使用WebBrowser報腳本錯誤問題處理,我們都知道WPF自帶的WebBrowser都用的IE內核,但是在特殊的條件下我們還需要用到它,比如展示純html簡單的頁面。再展示主流頁面的時候比如用到Jquery高級庫或者VUE等當前主流站點時經常就會報JS腳本錯誤,在Winform里面我們一句代…

【精選】設計模式——工廠設計模式

工廠設計模式是一種創建型設計模式&#xff0c;其主要目的是通過將對象的創建過程封裝在一個工廠類中來實現對象的創建。這樣可以降低客戶端與具體產品類之間的耦合度&#xff0c;也便于代碼的擴展和維護。 工廠設計模式&#xff1a; 以下是Java中兩個常見的工廠設計模式示例…

C++ 關于結構體struct的一些總結

文章目錄 一、 結構體(struct)是什么&#xff1f;&#xff08;1&#xff09;概念&#xff08;2&#xff09;struct 與 calss 的區別 二、定義、聲明與初始化&#xff08;1&#xff09;三種定義結構體的方法&#xff1a;&#xff08;2&#xff09;結構體變量初始化 三、結構體嵌…

C++實現進程端口網絡數據接收系統設計示例程序

一、問題描述 最近做了一道簡單的系統設計題&#xff0c;大概描述如下&#xff1a; 1.一個進程可以綁定多個端口&#xff0c;用于監聽接收網絡中的數據&#xff0c;但是一個端口只能被一個進程占用 2.1 < pid < 65535, 1 < port < 100000, 1 < topNum < 5, …

ros2/ros安裝ros-dep||rosdep init錯誤

第一個錯誤的做法&#xff1a; sudo apt-get install python3-pip sudo pip3 install 6-rosdep sudo 6-rosdep 如果使用上述代碼將會摧毀整個系統&#xff0c;不重裝系統反正我是搞不定啊&#xff0c;因為我不知道那個寫軟件的人到底做了什么。因為這個我安裝的版本是humble&…

AlexNet 閱讀筆記

“ImageNet Classification with Deep Convolutional Neural Networks” (Krizhevsky 等, 2012, p. 1) 使用深度卷積神經網絡進行 ImageNet 分類 3公式&#xff0c;26個引用&#xff0c;4張圖片&#xff0c;2個簡單表格 Abstract 我們訓練了一個大型深度卷積神經網絡&#…