思路:这个题目比较简单,一开始没看出来是什么图形,后来突然发现,中间是一个十字架,周围是一个闭合的图形把中间的十字架包围起来了,题目的意思是输入外面闭合图形的层数,输出最后的图形。
这个图形打印我是分成三个部分做的,中间十字架的部分,十字架上面的区域,十字架下面的区域,其实十字架上面的区域和下面的区域是相同的,画出一个部分,另一个部分就画出来了。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char ans[200][200];
int main()
{
int n;
cin>>n;
int m=5+n*4;
int r=(m)/2;
int c=(m)/2;
/// 中间五行
for(int rr=r-2; rr<=r+2; rr++)
{
int i;
for(i=0; i<n*2; i+=2)
{
ans[rr][i]='$';
ans[rr][i+1]='.';
}
for(int j=1; j<=5; j++)
{
ans[rr][i++]='$';
}
for(i; i<m; i+=2)
{
ans[rr][i]='.';
ans[rr][i+1]='$';
}
}
ans[r-1][c-1]=ans[r-1][c-2]=ans[r-1][c+1]=ans[r-1][c+2]='.';
ans[r+1][c-1]=ans[r+1][c-2]=ans[r+1][c+1]=ans[r+1][c+2]='.';
ans[r-2][c-1]=ans[r-2][c+1]=ans[r+2][c-1]=ans[r+2][c+1]='.';
ans[r-2][c-3]=ans[r-2][c+3]=ans[r+2][c-3]=ans[r+2][c+3]='$';
int nn=n-1;
for(int i=0; i<n*2; i+=2)
{
int mid=5+nn*4;
nn--;
if(i==0)
{
for(int j=0; j<2; j++)
{
ans[i][j]='.';
ans[i+1][j]='.';
}
for(int j=0; j<mid; j++)
{
ans[i][j+2]='$';
if(j==0||(j==mid-1))
{
ans[i+1][j+2]='$';
}
else
{
ans[i+1][j+2]='.';
}
}
for(int j=0; j<2; j++)
{
ans[i][j+mid+2]='.';
ans[i+1][j+mid+2]='.';
}
}
else
{
int t=mid+2+6;
int rr=(m-t)/2;
for(int j=0; j<rr; j+=2)
{
ans[i][j]=ans[i+1][j]='$';
ans[i][j+1]=ans[i+1][j+1]='.';
ans[i][m-j-1]=ans[i+1][m-j-1]='$';
ans[i][m-j-2]=ans[i+1][m-j-2]='.';
}
for(int j=0; j<3; j++)
{
ans[i][j+rr]=ans[i+1][j+rr]='$';
ans[i][j+rr+mid+3+2]=ans[i+1][j+rr+mid+3+2]='$';///
}
ans[i][rr+3]=ans[i+1][rr+3]='.';
ans[i][rr+3+mid+1]=ans[i+1][rr+3+mid+1]='.'; ///
for(int j=0; j<mid; j++)
{
ans[i][j+rr+3+1]=ans[i+1][j+rr+3+1]='$';
}
int tt=mid/2-1;
for(int j=0; j<=tt; j++)
{
ans[i+1][c-j]='.';
ans[i+1][c+j]='.';
}
ans[i+1][c-mid/2-2]=ans[i+1][c-mid/2-3]='.';///
ans[i+1][c+mid/2+2]=ans[i+1][c+mid/2+3]='.';///
}
}
nn=n-1;
for(int i=m-1; i>c+2; i-=2)
{
int mid=5+nn*4;
nn--;
if(i==m-1)
{
for(int j=0; j<2; j++)
{
ans[i][j]='.';
ans[i-1][j]='.';
}
for(int j=0; j<mid; j++)
{
ans[i][j+2]='$';
if(j==0||(j==mid-1))
{
ans[i-1][j+2]='$';
}
else
{
ans[i-1][j+2]='.';
}
}
for(int j=0; j<2; j++)
{
ans[i][j+mid+2]='.';
ans[i-1][j+mid+2]='.';
}
}
else
{
int t=mid+2+6;
int rr=(m-t)/2;
for(int j=0; j<rr; j+=2)
{
ans[i][j]=ans[i-1][j]='$';
ans[i][j+1]=ans[i-1][j+1]='.';
ans[i][m-j-1]=ans[i-1][m-j-1]='$';
ans[i][m-j-2]=ans[i-1][m-j-2]='.';
}
for(int j=0; j<3; j++)
{
ans[i][j+rr]=ans[i-1][j+rr]='$';
ans[i][j+rr+mid+3+2]=ans[i-1][j+rr+mid+3+2]='$';///
}
ans[i][rr+3]=ans[i-1][rr+3]='.';
ans[i][rr+3+mid+1]=ans[i-1][rr+3+mid+1]='.'; ///
for(int j=0; j<mid; j++)
{
ans[i][j+rr+3+1]=ans[i-1][j+rr+3+1]='$';
}
int tt=mid/2-1;
for(int j=0; j<=tt; j++)
{
ans[i-1][c-j]='.';
ans[i-1][c+j]='.';
}
ans[i-1][c-mid/2-2]=ans[i-1][c-mid/2-3]='.';///
ans[i-1][c+mid/2+2]=ans[i-1][c+mid/2+3]='.';///
}
}
for(int i=0; i<m; i++)
{
cout<<ans[i]<<endl;
}
}
网友评论