題意:給定一個數字,輸出對應的十字圖
思路:把整個圖分爲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