蓝桥杯 PREV-2 打印十字图

打印十字图

时间限制:1.0s 内存限制:256.0MB
问题描述
小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:
这里写图片描述
对方同时也需要在电脑dos窗口中以字符的形式输出该标志,并能任意控制层数。

输入格式
一个正整数 n (n<30) 表示要求打印图形的层数。
输出格式
对应包围层数的该标志。
样例输入1

1

样例输出1
这里写图片描述
样例输入2

3

样例输出2
这里写图片描述
提示
请仔细观察样例,尤其要注意句点的数量和输出位置。
题目网址:(http://lx.lanqiao.cn/problem.page?gpid=T25)

题意:
本题要求输入一个整数n,n为要打印图形的层数,输出十字图形。
思路:
图形中心对称图形,所以只要找到一半就行了,每加一层就会先加一层句号再加一层$,如果用c写的话太麻烦,所以用vector容器比较好。
代码:

#include<vector>
#include<string>
#include<iostream>
using namespace std;
int main()
{
    vector<string> v;//定义字符串型容器
    string s;
    int n,i,j;
    cin>>n;
    v.push_back("..$$$$$..");//当n为一层的上半部分
    v.push_back("..$...$..");//容器尾部扩充
    v.push_back("$$$.$.$$$");
    v.push_back("$...$...$");
    v.push_back("$.$$$$$.$");
    for(i=2;i<=n;i++)//当n大于1时增加层次
    {
        for(j=0;j<v.size();j++)//循环在每个字符串前后加句号
        {
            v[j].insert(v[j].begin(),'.');
            v[j].insert(v[j].end(),'.');
        }
        v[0].replace(0,2,"$$");//把第一个字符串的前两个字符换掉
        v[0].replace(v[0].end()-2,v[0].end(),"$$");//把第一个字符串的前两个字符换掉
        for(j=0;j<3+4*(i-1);j++)//在最上面加入句号的数量
            s=s+'.';
        v.insert(v.begin(),s);//把字符串s添加到容器最前面
        s="";//字符串清空
        for(j=0;j<v.size();j++)//循环在每个字符串前后加$
        {
            v[j].insert(v[j].begin(),'$');
            v[j].insert(v[j].end(),'$');
        }
        for(j=0;j<5+4*(i-1);j++)//在最上面加入$的数量
            s=s+'$';
        v.insert(v.begin(),s);//把字符串s添加到容器最前面
        s="";
        //在前两个字符串最前面和最后面各加两个句号
        v[0].insert(v[0].begin(),'.');
        v[0].insert(v[0].begin(),'.');
        v[1].insert(v[1].begin(),'.');
        v[1].insert(v[1].begin(),'.');
        v[0].insert(v[0].end(),'.');
        v[0].insert(v[0].end(),'.');
        v[1].insert(v[1].end(),'.');
        v[1].insert(v[1].end(),'.');
    }
    for(j=0;j<v.size();j++)//输出上半部分
        cout<<v[j]<<endl;
    for(j=v.size()-2;j>=0;j--)//输出下半部分
        cout<<v[j]<<endl;
    return 0;
}

运行结果:
这里写图片描述
这里写图片描述
总结:
这个题找到规律用自己学到的知识慢慢写就可以写出来,这个题需要耐心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值