您的位置:首页 > 其它

蓝桥杯 打印十字

2017-04-07 16:08 204 查看
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:

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

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1
1
样例输出1
..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$.$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..
样例输入2
3
样例输出2
..$$$$$$$$$$$$$..
..$...........$..
$$$.$$$$$$$$$.$$$
$...$.......$...$
$.$$$.$$$$$.$$$.$
$.$...$...$...$.$
$.$.$$$.$.$$$.$.$
$.$.$...$...$.$.$
$.$.$.$$$$$.$.$.$
$.$.$...$...$.$.$
$.$.$$$.$.$$$.$.$
$.$...$...$...$.$
$.$$$.$$$$$.$$$.$
$...$.......$...$
$$$.$$$$$$$$$.$$$
..$...........$..
..$$$$$$$$$$$$$..
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。


模拟题 刚开始死活没看出来十字在哪,发现怎么走之后就可以推出来了。

我的想法是先固定中间十字的位置,

..$$$$$..
..$...$..
$$$.$.$$$
$...$...$
$*$$$$$.$
$...$...$
$$$.$.$$$
..$...$..
..$$$$$..


然后从上面的*位置开始走,点走一圈,$走一圈。

#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;

char ans[200][200];
int N;
int solve(int i,int j,char c)
{
while(ans[i][j+1] != '\0')
ans[--i][j] = c;
while(ans[i][j+1] == '\0')
ans[i][++j] = c;
while(ans[i][j+1] != '\0')
ans[--i][j] = c;
while(ans[i+1][j] != '\0')
ans[i][++j] = c;
while(ans[i+1][j] == '\0')
ans[++i][j] = c;
while(ans[i+1][j] != '\0')
ans[i][++j] = c;
while(ans[i][j-1] != '\0')
ans[++i][j] = c;
while(ans[i][j-1] == '\0')
ans[i][--j] = c;
while(ans[i][j-1] != '\0')
ans[++i][j] = c;
while(ans[i-1][j] != '\0')
ans[i][--j] = c;
while(ans[i-1][j] == '\0')
ans[--i][j] = c;
while(ans[i-1][j] != '\0')
ans[i][--j] = c;
while(ans[i-1][j] == '\0')
ans[--i][j] = c;
}
int main()
{

cin >> N;
int ilen = 5+4*N;
memset(ans,'\0',sizeof(ans));
int a = ilen/2-2;

for(int i = a; i <= (ilen/2+2); i++)
{
ans[i][ilen/2] = '$';
ans[ilen/2][i] = '$';
}
int x = ilen/2 - 2;
for(int i = 0; i < N; i++)
{
solve(ilen/2,--x,'.');
solve(ilen/2,--x,'$');

}
ans[0][0] = ans[0][1] = ans[1][0] = ans[1][1] = '.';
ans[ilen-1][0] = ans[ilen-1][1] = ans[ilen-2][0] = ans[ilen-2][1] = '.';
ans[0][ilen-1] = ans[0][ilen-2] = ans[1][ilen-1] = ans[1][ilen-2] = '.';
ans[ilen-1][ilen-1] = ans[ilen-1][ilen-2] = ans[ilen-2][ilen-1] = ans[ilen-2][ilen-2] = '.';
for(int i = 0; i < 5+4*N ;i++)
{
for(int j = 0; j < 5+4*N ;j ++)
cout<<ans[i][j];
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: