1. 程式人生 > >C++迴圈輸出M * N 的螺旋矩陣

C++迴圈輸出M * N 的螺旋矩陣

什麼是螺旋矩陣?

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

如圖11  *   7的螺旋矩陣

如圖11  * 11的螺旋矩陣

話不多說,上程式碼:

#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{

	#define M   11 //矩陣行數
	#define N     7 //矩陣列數

	int matrix[M][N] = { 0 };
	int row = 0;
	int col =   0;
	int start = 1; //起始值



	int m =M;
	int n = N;
	//可以畫N/2個圈
	for (int count = 0; count < N / 2; count++)  
	{
		for (; col < n - 1; col++) //a排賦值
		{
			matrix[row][col] = start++;
		}
		for (; row < m - 1; row++) //b排賦值
		{
			matrix[row][col] = start++;
		}
		for (col = n - 1; col > count; col--) //c排賦值
		{
			matrix[row][col] = start++;
		}
		for (row = m- 1; row > count; row--) //d排賦值
		{
			matrix[row][col] = start++;
		}
		//進入下一圈
		m--;
		n--;
		row++;
		start--; //這裡是因為在換圈的時候會多加1
	}
	if (N % 2 != 0) //如果size為奇數則最後中間那一個數遍歷不到,這裡補上
	{
		int  z = M - 2 *row;
		for(int i=0  ;  i< z   ;++i)
		matrix[row++][col + 1] =++ start ;
	}

	//輸出陣列
	for (int i = 0; i < M; i++)
	{
		for (int j = 0; j < N; j++)
		{
			cout << setw(3) << matrix[i][j];//設定輸出寬度為3
		}
		cout << endl;
	}


	return 0;
}