1. 程式人生 > >[土狗之路]coursera C語言進階習題 二維陣列右上左下遍歷

[土狗之路]coursera C語言進階習題 二維陣列右上左下遍歷

程式設計題#2: 二維陣列右上左下遍歷

來源: POJ (Coursera宣告:在POJ上完成的習題將不會計入Coursera的最後成績。)

注意: 總時間限制: 1000ms 記憶體限制: 65536kB

描述

給定一個row行col列的整數陣列array,要求從array[0][0]元素開始,按從左上到右下的對角線順序遍歷整個陣列。


輸入

輸入的第一行上有兩個整數,依次為row和col。

餘下有row行,每行包含col個整數,構成一個二維整數陣列。

(注:輸入的row和col保證0 < row < 100, 0 < col < 100)

輸出

按遍歷順序輸出每個整數。每個整數佔一行。

樣例輸入

3 4
1 2 4 7
3 5 8 10
6 9 11 12

樣例輸出

1
2
3
4
5
6
7
8
9
10
11
12

這道題,為了簡單說下我的想法,我還畫了個圖:


只要能夠想到虛線部分的,就可以將這道題簡化非常多,然後開始貼程式碼吧:

#include<iostream>
using namespace std;
int main() {
	int row, col;
	cin >> row >> col;
	int shuzu[100][100];
	for (int j = 0; j < row; j++) {
		for (int o = 0; o < col; o++) {
			cin >> shuzu[j][o];
		}
	}
	int k = col + row - 1;//共有(行數+列數-1)條對角線
	for (int i = 0; i <= k; ++i) {//對每一條對角線進行處理
		int c = i - 1;//對角線行數列數起始點為0,每次+1;所以,剛好起始點橫座標是對角線編號-1
		for (int r = 0; r < row; r++) {//同理

				if (r>=0&&r < row&&c < col&&c>=0) {//通過這個,找到在範圍內的。
					cout << *(*(shuzu + r) + c) << endl;//只打印在範圍內的
				}
				c--;//因為是由右邊到左邊,所以C--
			}
		
	}
	return 0;
}