蓝桥杯 打印十字

来源:互联网 发布:东软信息学院域名 编辑:程序博客网 时间:2024/05/17 17:54
问题描述小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:..$$$$$$$$$$$$$....$...........$..$$$.$$$$$$$$$.$$$$...$.......$...$$.$$$.$$$$$.$$$.$$.$...$...$...$.$$.$.$$$.$.$$$.$.$$.$.$...$...$.$.$$.$.$.$$$$$.$.$.$$.$.$...$...$.$.$$.$.$$$.$.$$$.$.$$.$...$...$...$.$$.$$$.$$$$$.$$$.$$...$.......$...$$$$.$$$$$$$$$.$$$..$...........$....$$$$$$$$$$$$$..对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。输入格式一个正整数 n (n<30) 表示要求打印图形的层数。输出格式对应包围层数的该标志。样例输入11样例输出1..$$$$$....$...$..$$$.$.$$$$...$...$$.$$$$$.$$...$...$$$$.$.$$$..$...$....$$$$$..样例输入23样例输出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;}
0 0
原创粉丝点击