题目描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。
输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出
对应包围层数的该标志。
样例输入
3
样例输出
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
最近发现对容器比较敏感,老往那方面想,哈哈,又解决一个:还需要八方向搜索
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
int dir[][]={{-,-},{-,},{-,},{,-},{,},{,-},{,},{,}};//八方向搜索
char s[][];
struct state
{
int x,y;
}num[],ms,me;
queue < state >nnn;
queue < state >mmm;
void fun(int a,int b)//存入基本十字架
{
s[a][b]='$';
ms.x=a;ms.y=b;
nnn.push(ms);
s[a][b+]='$';s[a][b+]='$';s[a][b-]='$';s[a][b-]='$';
ms.x=a;ms.y=b+;nnn.push(ms);ms.x=a;ms.y=b+;nnn.push(ms);ms.x=a;ms.y=b-;nnn.push(ms);
ms.x=a;ms.y=b-;nnn.push(ms);
s[a+][b]='$';s[a+][b]='$';s[a-][b]='$';s[a-][b]='$';
ms.x=a+;ms.y=b;nnn.push(ms);ms.x=a+;ms.y=b;nnn.push(ms);ms.x=a-;ms.y=b;nnn.push(ms);
ms.x=a-;ms.y=b;nnn.push(ms);
}
int main()
{ int i,n,xx,yy;
num[].x=;num[].y=;
for(i=;i<;i++)
{
num[i].x=num[i-].x+;
num[i].y=num[i-].y+;
}
state st;
memset(s,'',sizeof(s));
cin>>n;
int nn=n;
fun(num[n].x,num[n].y);
while(n--)
{
while(!nnn.empty())//打印外圈的*
{
st=nnn.front();
nnn.pop();
for(i=;i<;i++)
{
xx=st.x+dir[i][];
yy=st.y+dir[i][];
if(s[xx][yy]=='')
{
s[xx][yy]='.';
ms.x=xx;ms.y=yy;
mmm.push(ms);
}
}
}
while(!mmm.empty())//再外一层的&
{
st=mmm.front();
mmm.pop();
for(i=;i<;i++)
{
xx=st.x+dir[i][];
yy=st.y+dir[i][];
if(s[xx][yy]=='')
{
s[xx][yy]='$';
ms.x=xx;ms.y=yy;
nnn.push(ms);
}
}
}
}
for( i=;i<num[nn].x*;i++)//输出整个图形
{
for(int j=;j<num[nn].y*;j++)
{
if(s[i][j]=='')
cout<<".";
else
cout<<s[i][j];
}
cout<<endl;
}
return ;
}