藍橋杯 PREV-2 打印十字圖

題意:給定一個數字,輸出對應的十字圖

思路:把整個圖分爲6個部分來做,貼一張大佬的圖:

 

分爲這麼六個部分去做,

首先打印中間的十字,然後打印其左上的,在打印右上的,在打印右下的,在打印左下的,最後打印第6個部分

十字:

左上角的:

右上角的:

右下角的:

左下角的:

最後第6部分

代碼:

#include<iostream>
using namespace std;
const int maxn = 30*4+9;
int arr[maxn][maxn];
int main(){
	int n,m;
	cin>>n;
	m = (n-1)*4+9;//每層的格子數
	for(int i=m/2-1;i<=m/2+3;i++){//打印中心的十字 
		arr[i][m/2+1] = arr[m/2+1][i] = 1;
	}
	for(int i=1;i<=n;i++){//對每層進行打印 
		int x = 2*i+1,y = 2*i;
		arr[x][y] = arr[x][y+1] = arr[x-1][y+1] = 1;//打印左上的一部分 
		y = m-2*i;
		arr[x][y] = arr[x][y+1] = arr[x-1][y] = 1;//打右上的那一部分
		x = m-2*i;
		arr[x][y] = arr[x][y+1] = arr[y+1][x] = 1;//打印右下的那一部分 
		y = 2*i;
		arr[x][y] = arr[x][y+1] = arr[x+1][y+1] = 1;//打印左下的那一部分 
		for(int j=2*i+1;j<=m-2*i;j++){
			arr[(i-1)*2+1][j] = arr[j][(i-1)*2+1] = arr[m-(i-1)*2][j] = arr[j][m-(i-1)*2] = 1;
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			if(arr[i][j] == 1)printf("$");
			else printf(".");
		}
		printf("\n");
	} 
	return 0;
}

參考大佬的:https://blog.csdn.net/update7/article/details/71102255

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章