打印十字图【蓝桥杯真题】C++

 

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


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

 

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

输入

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

输出

对应包围层数的该标志。

样例输入

3  
样例输出

直接暴力循环

思路如下:

先打印出十字架 写第一个for循环:

 然后打印四个角和四条边,发现可以写在一个for循环里,虽然比较复杂,但是时间复杂度应该算挺少的:

                        

#include<iostream>
using namespace std;
char sizi[130][130];
int main(){
    int n;
    cin>>n;
    for(int x=n*2;x<=2*n+4;x++){
                sizi[x][2*n+2]=sizi[2*n+2][x]=1;
    }
    //画出十字架
    for(int i=1;i<=n;i++){
        sizi[2*i][2*i]=1;
        sizi[2*i][2*(n-i)+4+2*n]=1;
        sizi[2*(n-i)+4+2*n][2*i]=1;
        sizi[2*(n-i)+4+2*n][2*(n-i)+4+2*n]=1;
        sizi[2*i-1][2*i]=1;
        sizi[2*i-1][2*(n-i)+4+2*n]=1;
        sizi[2*(n-i)+4+2*n+1][2*i]=1;
        sizi[2*(n-i)+4+2*n+1][2*(n-i)+4+2*n]=1;
        sizi[2*i][2*i-1]=1;
        sizi[2*i][2*(n-i)+4+2*n+1]=1;
        sizi[2*(n-i)+4+2*n][2*i-1]=1;
        sizi[2*(n-i)+4+2*n][2*(n-i)+4+2*n+1]=1;
        //做出4个角
        for(int s=2*i;s<=2*(n-i)+4+2*n;s++){
            sizi[2*(i-1)][s]=1;
            sizi[s][2*(i-1)]=1;
            sizi[s][4*n+6-2*i]=1;
            sizi[4*n+6-2*i][s]=1;
        }
        //做出4条边
    }
    for(int x=0;x<4*n+5;x++){
         for(int y=0;y<4*n+5;y++){
             if(sizi[x][y]!=1){cout<<'.';}
             else{ cout<<'$';}
        }
        cout<<endl;
    }
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值