close

內容
輸出一螺旋矩陣。


輸入說明
每行有一正整數T,代表有幾組測試資料
接下來有T行, 每行有N、M兩正整數
N為矩陣長寬,就是會有N*N矩陣
M為方向,M=1為順時鐘,M=2為逆時鐘
N範圍為1~100之間 


輸出說明
把矩陣輸出,矩陣值之間寬度為5,就是[00000]寬度
C++可用setw(5)或C的%5d輸出

感謝 Sean64 https://zerojudge.tw/ShowThread?postid=12309&reply=0

因為不會 ,所以我理解後,照著他的思路打一次。

請大家一定要先去看他的喔。

 

C++

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
	int t,n,m;
	while(cin>>t)
	{
		while(t--)
		{
			int r[100][100];
			int count=1;//計數器 
			
			cin>>n>>m;
			
			//j<(n+1)/2 繞一圈就有兩層 所以小於n+1/2 就可以了
			for(int j=0;j<(n+1)/2;j++) //繞幾圈 
			{
				//j<(n+1)/2 同理 所以n - (j*2) -1;
				for(int k=0;k<n-j*2-1;k++) //上面 
				{
					r[j][k+j]=count++;
				}
				for(int k=0;k<n-j*2-1;k++)//右邊 
				{
					r[j+k][n-j-1]=count++;
				}
				for(int k=0;k<n-j*2-1;k++)//下面 
				{
					r[n-j-1][n-j-k-1]=count++;
				}
				for(int k=0;k<n-j*2-1;k++)//左邊 
				{
					r[n-j-k-1][j]=count++;
				}
			}
			
			if(n%2)//正中間 
			{
				r[n/2][n/2]=count++;
			}
			
			//輸出 
			for(int j=0;j<n;j++)
			{
				for(int k=0;k<n;k++)
				{
					if(m==1)
					{
						cout<<setw(5)<<r[j][k];//順時針 
					}
					else
					{
						cout<<setw(5)<<r[k][j];//逆時針 行列互換就好 
					}
				}
				cout<<endl;
			}
			cout<<endl;
		}
	}
	return 0;
}
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 豪CO 的頭像
    豪CO

    程式道路,必為豐富

    豪CO 發表在 痞客邦 留言(0) 人氣()