---
# System prepended metadata

title: 第九次實習課額外加分題 - 陣列練習
tags: [實習額外加分題]

---

###### tags: `實習額外加分題`

第九次實習課額外加分題 - 陣列練習
===

> 此題來自東華資工系OJ
> [歡迎點我去那邊玩玩!](http://134.208.3.66/problem/PR110-08-01)

## Description
如果在矩陣中，多數的元素並沒有資料，稱此矩陣為稀疏矩陣（sparse matrix），由於矩陣在程式中常使用二維陣列表示，二維陣列的大小與使用的記憶體空間成正比，如果多數的元素沒有資料，則會造成記憶體空間的浪費，為 此，必須設計稀疏矩陣的壓縮方式，利用較少的記憶體空間儲存完整的矩陣資訊。

在這邊所介紹的方法較為簡單，陣列只儲存矩陣的行數、列數與有資料的索引位置及其值，在需要使用矩陣資料時，再透過程式運算加以還原，例如若矩陣資料如下 ，其中0表示矩陣中該位置沒有資料：

```
0  0  0  0  0  0
0  3  0  0  0  0
0  0  0  6  0  0
0  0  9  0  0  0
0  0  0  0  12 0
```

這個矩陣是5X6矩陣，非零元素有4個，您要使用的陣列第一列記錄其列數、行數與非零元素個數：
``` 5  6  4 ```
陣列的第二列起，記錄其位置的列索引、行索引與儲存值：
```
row col val
 1   1   3
 2   3   6
 3   2   9
 4   4   12
```
所以原本要用30個元素儲存的矩陣資訊，現在壓縮到只使用了15個元素來儲存，節省了不少記憶體的使用。

請寫一個程式，輸入壓縮後的資料，將矩陣還原後輸出。

## Constraint
* 本來在筆記裡面跟你們說這樣寫是不好的。我舉個例，不管是二維或是一維。
```cpp=
int a = 0;
cin >> a;
int array[a];
```
* 但因為還沒教你們動態配置陣列，所以我們就允許你偷吃步這樣做。至於這題要用一維還是二維，就麻煩自己動動腦瞜。

## Sample Input 1
```
5 6 4
1 1 3
2 3 6
3 2 9
4 4 12
```

## Sample Output 1
```
0 0 0 0 0 0 
0 3 0 0 0 0 
0 0 0 6 0 0 
0 0 9 0 0 0 
0 0 0 0 12 0 
```

<!-- answer
 int main(){
	int row = 0, col = 0, content = 0;
	int row_s = 0, col_s = 0, content_s;
	cin >> row >> col >> content;
	int arr[row][col] = {};
	for(int i = 0; i < content; i++){
		cin >> row_s >> col_s >> content_s;
		arr[row_s][col_s] = content_s;
	}
	for(int i = 0; i < row; i++){
		for(int j = 0; j < col; j++){
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}
    return 0;
}
-->