您的位置:首页 > 其它

历届试题 打印十字图

2017-05-24 12:35 190 查看
历届试题 打印十字图  

时间限制:1.0s   内存限制:256.0MB
      

问题描述

小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:

..$$$$$$$$$$$$$..

..$...........$..

$$$.$$$$$$$$$.$$$

$...$.......$...$

$.$$$.$$$$$.$$$.$

$.$...$...$...$.$

$.$.$$$.$.$$$.$.$

$.$.$...$...$.$.$

$.$.$.$$$$$.$.$.$

$.$.$...$...$.$.$

$.$.$$$.$.$$$.$.$

$.$...$...$...$.$

$.$$$.$$$$$.$$$.$

$...$.......$...$

$$$.$$$$$$$$$.$$$

..$...........$..

..$$$$$$$$$$$$$..

对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式

一个正整数 n (n<30) 表示要求打印图形的层数。

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

..$$$$$..

..$...$..

$$$.$.$$$

$...$...$

$.$$$$$.$

$...$...$

$$$.$.$$$

..$...$..

..$$$$$..

样例输入2

3

样例输出2

..$$$$$$$$$$$$$..

..$...........$..

$$$.$$$$$$$$$.$$$

$...$.......$...$

$.$$$.$$$$$.$$$.$

$.$...$...$...$.$

$.$.$$$.$.$$$.$.$

$.$.$...$...$.$.$

$.$.$.$$$$$.$.$.$

$.$.$...$...$.$.$

$.$.$$$.$.$$$.$.$

$.$...$...$...$.$

$.$$$.$$$$$.$$$.$

$...$.......$...$

$$$.$$$$$$$$$.$$$

..$...........$..

..$$$$$$$$$$$$$..

提示

//思路:观察图形发现中间是用'$'形成的十字 然后围上一圈 '.'之后在围上一圈'$' 以此类推 四角另外处理 还有一点是中间十字大小固定

//用整形数组方便处理 ,0 代表没有画图 -1 代表'$' 1代表'.'

//第一步:先给中间十字位置赋值为 -1 ;

//第二步:找到中间是用'$'形成的十字 (其实是-1),将其一周为 0 的位置改为 1(有值代表画好了'$' '.'不能覆盖)

//第三步:找到数组中用'.'形成的十字 (其实是1),将其一周为 0 的位置改为 -1

//以此类推 循环 输入数字 的两倍次

//参考代码

# include <stdio.h>

int a[150][150]= {0};//创建数组初始化为零,代表没有画图型

int n , m ; //n代表画的图形大小输入量,m= n*4+5 

void fun_pant(int x ,int y )//将其一周为 0 的位置改为 1 或 -1

{
if(a[x][y]==1)
{
if(a[x+1][y]==0)
a[x+1][y] =-1;
if(a[x+1][y+1]==0)
a[x+1][y+1] =-1;
if(a[x+1][y-1]==0)
a[x+1][y-1] =-1;
if(a[x][y+1]==0)
a[x][y+1] =-1;
if(a[x][y-1]==0)
a[x][y-1] =-1;
if(a[x-1][y]==0)
a[x-1][y]   =-1;
if(a[x-1][y+1]==0)
a[x-1][y+1] =-1;
if(a[x-1][y-1]==0)
a[x-1][y-1] =-1;

}
else
{
if(a[x+1][y]==0)    a[x+1][y]  =1;
if(a[x+1][y+1]==0)  a[x+1][y+1]=1;
if(a[x+1][y-1]==0)  a[x+1][y-1]=1;
if(a[x][y+1]==0)    a[x][y+1]  =1;
if(a[x][y-1]==0)    a[x][y-1]  =1;
if(a[x-1][y]==0)    a[x-1][y]  =1;
if(a[x-1][y+1]==0)  a[x-1][y+1]=1;
if(a[x-1][y-1]==0)  a[x-1][y-1]=1;
}

}

int main (void)

{

int k,i , j ;
int x  ;
int ji =-1;//用来判断选的是
scanf("%d",&n); 
m= n*4+5;
x=m/2+1;
a[x][x]=-1;
a[x+1][x]=-1;
a[x+2][x]=-1;
a[x][x+1]=-1;
a[x][x+2]=-1;
a[x-1][x]=-1;
a[x-2][x]=-1;
a[x][x-1]=-1;
a[x][x-2]=-1;
for(k=0;k<2*n;k++)
{

for(i=1;i<=m;i++)
{
for(j=0;j<=m;j++)
{
if(a[i][j]!=0 && a[i][j]==ji)
fun_pant(i,j);
}
}
ji*=-1; 
}
for(i=1;i<=m;i++)
{
for(j=1;j<=m;j++)
{
//printf("%2d",a[i][j]);

if(a[i][j]==-1)//画出图像
printf("$");
else if(a[i][j]==1 ||a[i][j]==0)//由于原图四角是点 ,在画图过程中没画过是 0 ,所以0 1 都画‘.’
printf(".");

}
printf("\n");
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: