字母旋轉方陣

在這裏插入圖片描述

分析一下問題

我們需要以旋轉的方式進行填寫,先假設我們已經有了一張空白的二維數組,下面我們要往裏面進行填數,但是我們會發現一個問題,我們填數的方式不同於以往的按照行,列依次填寫,我們會往上、下、左、右四個不同的方向前進填寫。
我們可以考慮寫一些if判斷我們要往哪個方向前進
比如:
if(我上一步是往右,我現在還能往右)我往右填寫
if(我上一步往右,下一步不能往右)我改成往下寫
這樣我們的問題就解決了。
下面我們考慮一種新的思路
我們發現我們總會按照右,下,左,上的順序進行填寫,並且循環完之後還會重複。
所以我們可以考慮用兩個數組把4個方向的前進路線提前寫好,然後只需要在我不能填寫的時候換一下方向即可。
附代碼:

#include<stdio.h>
int main()
{
	int X[4] = {0,1,0,-1};//便與轉換行的方向 
	int Y[4] = {1,0,-1,0};//便於轉換列的方向 
	int n,m,x1,y1,ji = 0;//ji表示第幾個方向 
	char ma[105][105],noww = 'B';//noww爲我下一個要放的字母 
	scanf("%d %d",&n,&m);
	x1 = 1;y1 = 1;ma[1][1] = 'A';//初始化 
	for(int i = 2;i <= m * n;i ++)
	{
		int x2 = x1 + X[ji],y2 = y1 + Y[ji];//用x2,y2表示我下一個要放的位置 
		if(x2 < 1||x2 > n||y2 < 1||y2 > m||ma[x2][y2]) ji ++;
		//判斷下一個放的位置是否合法 
		if(ji == 4) ji = 0;
		//方向只有4種,輪迴使用 
		x1 = x1 + X[ji];y1 = y1 + Y[ji];
		ma[x1][y1] = noww;
		noww ++;
		//字符可以通過ASCII碼進行加減操作 
		if(noww > 'Z') noww = 'A';
		//字母只有26種,輪迴使用 
	}
	for(int i = 1;i <= n;i ++)
	{
		for(int j = 1;j <= m;j ++)
			printf(" %c",ma[i][j]);
		puts("");
	}	
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章