历届试题 打印十字图
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;
}
时间限制: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;
}
相关文章推荐
- 蓝桥杯-历届试题-打印十字图
- 历届试题 打印十字图 (蓝桥杯)
- 蓝桥杯 历届试题 打印十字图
- 蓝桥杯之 历届试题 打印十字图
- 打印十字图-蓝桥杯历届试题
- 历届试题 打印十字图
- 历届试题 打印十字图
- 蓝桥杯 历届试题 打印十字图
- 历届试题 打印十字图
- 历届试题 PREV-2 打印十字图
- 蓝桥杯 历届试题 打印十字图(模拟水题,图形输出)
- 历届试题 打印十字图
- 历届试题 打印十字图
- 算法笔记_198:历届试题 打印十字图(Java)
- 蓝桥杯历届试题 打印十字图
- 历届试题 打印十字图(规律,中心对称)
- 历届试题 打印十字图
- 蓝桥杯 历届试题 打印十字图(打印)
- 蓝桥杯 历届试题 打印十字-----------------------C语言——菜鸟级
- 蓝桥杯-历届试题-打印十字图