【劍指offer】順時針列印矩陣
轉載請註明出處:http://blog.csdn.net/ns_code/article/details/26053049
劍指offer上的第20題,九度OJ上測試通過。
- 題目描述:
輸入一個矩陣,按照從外向裡以順時針的順序依次列印出每一個數字,例如,如果輸入如下矩陣:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
則依次列印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
- 輸入:
輸入可能包含多個測試樣例,對於每個測試案例,
輸入的第一行包括兩個整數m和n(1<=m,n<=1000):表示矩陣的維數為m行n列。
接下來的m行,每行包括n個整數,表示矩陣的元素,其中每個元素a的取值範圍為(1<=a<=10000)。
- 輸出:
對應每個測試案例,輸出一行,
按照從外向裡以順時針的順序依次列印出每一個數字,每個數字後面都有一個空格。
- 樣例輸入:
4 41 2 3 45 6 7 89 10 11 1213 14 15 16
- 樣例輸出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
這道題目沒有涉及到任何演算法,主要考察邏輯思維,注意各種情況的分析,迴圈退出的條件等。這道題目不像之前的那樣,輸出要特別注意最後一個輸出元素的輸出格式了。
AC程式碼如下:
#include<stdio.h>
#include<stdlib.h>
/*
順時針列印一圈
*/
void PrintMatrixCirclely(int **num,int m,int n,int start)
{
int endX = n-start-1;
int endY = m-start-1;
int i;
//從左到右列印行
for(i=start;i<=endX;i++)
printf("%d ",num[start][i]);
//從上到下列印列
if(start < endY)
{
for(i=start+1;i<=endY;i++)
printf("%d ",num[i][endX]);
}
//從右向左列印行
if(start<endX && start<endY)
{
for(i=endX-1;i>=start;i--)
printf("%d ",num[endY][i]);
}
//從下到上列印列
if(start<endX && start<endY-1)
{
for(i=endY-1;i>=start+1;i--)
{
printf("%d ",num[i][start]);
}
}
}
/*
順時針列印矩陣
*/
void PrintMatrixClockwisely(int **num,int m,int n)
{
if(num==NULL || m<=0 || n<=0)
return;
int start = 0;
while(m>2*start && n>2*start)
{
PrintMatrixCirclely(num,m,n,start);
start++;
}
}
int main()
{
int m,n;
while(scanf("%d %d",&m,&n) != EOF)
{
int **num = (int **)malloc(m*sizeof(int *));
if(num == NULL)
exit(EXIT_FAILURE);
int i;
for(i=0;i<m;i++)
{
num[i] = (int *)malloc(n*sizeof(int));
if(num[i] == NULL)
exit(EXIT_FAILURE);
}
int j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&num[i][j]);
PrintMatrixClockwisely(num,m,n);
printf("\n");
for(i=0;i<m;i++)
{
free(num[i]);
num[i] = NULL;
}
free(num);
num = NULL;
}
return 0;
}
/**************************************************************
Problem: 1391
User: mmc_maodun
Language: C
Result: Accepted
Time:520 ms
Memory:912 kb
****************************************************************/
吐槽下:週末一般來大學城學習,週一到週五晚上一般去圖書館學習,這些點的學習效率是最高的!鑑於實驗室坑跌的考勤規定,週一到週五的上下午不得不呆在實驗室學習,不得不說這個時間段的效率真的是時而好,時而壞,索性開題前把這個時間段用來寫開題報告!
現在對實驗室真的是一點感情都沒了,滿滿的負能量。對這裡很失望,一個磨滅人理想的地方,對這裡的人也很失望,想找個志趣相投的人真的很難。
吐槽歸吐槽,其實也早已習慣了,畢竟都圈在裡面了一年了。畢業後大家都要為自己的未來做打算,誰還管得了誰呢?志趣相投的人會成就對方,而臭味相投的人只會毀了彼此。或許每個人的價值觀不同,但現實是早晚要面對的,體諒不到父母的辛苦,就永遠不會長大。
我很慶幸,在CSDN上結識了挺多有著共同追求的小夥伴,也很慶幸在這裡能找到很多正能量。有些人已經拿到不錯的offer,有些人還在努力,從未放棄,這些都是值得尊敬和學習的人。
任何人,只要有顆奮鬥的心,併為之長久地堅持和付出,生活總並不會虧待他的。
相關文章
- 劍指offer-19:順時針列印矩陣矩陣
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 力扣 - 劍指 Offer 29. 順時針列印矩陣力扣矩陣
- 劍指 Offer 29-順時針列印矩陣c++矩陣C++
- 劍指offer之順序列印陣列陣列
- JZ-019-順時針列印矩陣矩陣
- Python練習-LeetCode 第1篇 順時針列印矩陣PythonLeetCode矩陣
- [每日一題] 第二十一題:順時針列印矩陣每日一題矩陣
- 劍指offer:JZ12 矩陣中的路徑矩陣
- 劍指 Offer 12-矩陣中的路徑c++矩陣C++
- 力扣 - 劍指 Offer 12. 矩陣中的路徑力扣矩陣
- 第四章:多維陣列和矩陣 --------------- 4.1 基礎題:順時針列印二維陣列陣列矩陣
- 劍指Offer 撲克牌順子
- 劍指 offer(1) -- 陣列篇陣列
- 用 Go 劍指 Offer 12. 矩陣中的路徑 (DFS + 回溯)Go矩陣
- 劍指offer之列印超過陣列一半的數字陣列
- [劍指offer] 把二叉樹列印成多行二叉樹
- 劍指OFFER
- 【劍指Offer】調整陣列順序使奇數位於偶數前面陣列
- 劍指Offer-37-陣列中逆序對陣列
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 【劍指offer】5.二叉樹的映象和列印二叉樹
- 劍指offer-從尾到頭列印連結串列-phpPHP
- 劍指 Offer 列印從1到最大n位數c++C++
- 3. 從尾到頭列印連結串列(劍指offer)
- 劍指 Offer 21. 調整陣列順序使奇數位於偶數前面陣列
- 劍指offer:旋轉陣列的最小數字陣列
- 劍指offer 旋轉陣列的最小數字陣列
- 【劍指offer】二維陣列中的查詢陣列
- 劍指offer面試題12:矩陣中的路徑(Java版已在牛客網AC)面試題矩陣Java
- 劍指offer導航
- Leetcode劍指offer(八)LeetCode
- 劍指 offer21
- 劍指offer16
- 劍指 offer20
- 劍指offer--把二叉樹列印成多行(C++)二叉樹C++
- 【劍指 Offer 】17. 列印從1到最大的n位數
- 劍指offer——從上往下列印二叉樹C++二叉樹C++
- 劍指offer | 17. 列印從1到最大的n位數