蓝桥杯 打印十字
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; }
相关文章推荐
- 蓝桥杯历届-打印十字图
- 蓝桥杯 历届试题 打印十字图(打印)
- 蓝桥杯 PREV-2 打印十字图 (简单对称模拟)
- 蓝桥杯 打印十字图
- 蓝桥杯历届试题-打印十字图
- 历届试题 打印十字图 (蓝桥杯)
- 蓝桥杯练习题 PREV-2 打印十字图(文字图形)
- 蓝桥杯历届试题 打印十字图
- 蓝桥杯-打印十字图
- 蓝桥杯-----------打印十字图
- 蓝桥杯:打印十字图
- 蓝桥杯打印十字图
- 蓝桥杯 打印十字图
- 蓝桥杯 打印十字图
- 第四届蓝桥杯 软件类省赛真题 第八题:打印十字图
- 蓝桥杯 PREV-2 打印十字图
- 蓝桥杯 - 打印十字图 (文字图形类)
- 蓝桥杯——打印十字图
- 蓝桥杯:打印十字图
- 第四届蓝桥杯竞赛打印十字图案问题