您的位置:首页 > 编程语言 > C语言/C++

蓝桥杯 历届试题 打印十字-----------------------C语言——菜鸟级

2018-03-31 10:47 393 查看
/*问题描述

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

...........................$.$....…….…….....$.$.$.$...

..…......…..

...$.$.$.$..........……...

...............……...

...$.$.$.$.....……...……..$.$.$.$...

......…….......

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

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

输入格式

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

输出格式

对应包围层数的该标志。

样例输入1

1

样例输出1

..................$..$....……

......……

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

样例输入2

3

样例输出2

...........................$.$....…….…….....$.$.$.$...

..…......…..

...$.$.$.$..........……...

...............……...

...$.$.$.$.....……...……..$.$.$.$...

......…….......

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

提示

请仔细观察样例,尤其要注意句点的数量和输出位置。

思路:通过 层次覆盖法;一层一层的叠加;从最外层(底层)开始;为达到十字效果,通过 两个行 列相反的矩阵覆盖叠加而成;

做完一个外十字 做下一个十字时 注意缩进 本题除 最外层不满足十字;其他各层’.’与’$’区域均满足十字;

*/

#include<stdio.h>
void f(int n)
{
int i,j,t,k;
t=n+1;
n=n*4+5;//根据规律算出输出矩阵实际 行 列大小
char a[130][130];
for(i=1;i<=n;i++)//最外层
for(j=1;j<=n;j++)
a[i][j]='.';
for(k=1;k<=t;k++)//十字层数
{
for(i=1+2*k;i<=n-2*k;i++)//'$'区域十字合成
for(j=1+2*k-2;j<=n-(2*k-2);j++)
{
a[i][j]='$';
a[j][i]='$';
}

for(i=1+2*k+1;i<=n-(2*k+1);i++)//'.'区域十字合成
for(j=1+2*k-1;j<=n-(2*k-1);j++)
{
a[i][j]='.';
a[j][i]='.';
}

}

for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%c",a[i][j]);
printf("\n");
}

}

int main()
{int n;
scanf("%d",&n);
f(n);

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