HDU_1256画8

谁画8画的好,画的快,今后就发的快,学业发达,事业发达,祝大家发,发,发.
 

Input
输入的第一行为一个整数N,表示后面有N组数据.
每组数据中有一个字符和一个整数,字符表示画笔,整数(>=5)表示高度.
 

Output
画横线总是一个字符粗,竖线随着总高度每增长6而增加1个字符宽.当总高度从5增加到6时,其竖线宽度从1增长到2.下圈高度不小于上圈高度,但应尽量接近上圈高度,且下圈的内径呈正方形.
每画一个"8"应空一行,但最前和最后都无空行.
 

Sample Input
  
  
2 A 7 B 8
 

Sample Output
  
  
AA AA AA AA AA AA AA AA AA AA AA BBB BB BB BB BB BBB BB BB BB BB BB BB BBB

代码:

#include <iostream>
    #include <stdio.h>
    #include <string>
    using namespace std;
    string b1, b2, a1, a2;
    int main()
    {
        int n, h;
        char c;
        scanf("%d", &n);
        while (n--)
        {
            getchar();
            scanf("%c %d", &c, &h);
            int i = h/6 + 1;
            a1 = "";
            a2 = "";
            a1.insert(0,i,' ');
            a2.insert(0,i,c);
            a2 = a2 + a2;
            h -= 3;
            int j = h/2;
            a1.insert(i,h-j,c);
            a2.insert(i,h-j,' ');
            cout<<a1<<endl;
            for (i=0;i<j;++i)
                cout<<a2<<endl;
            cout<<a1<<endl;
            for (i=0;i<h-j;++i)
             cout<<a2<<endl;
            cout<<a1<<endl;
            if (n!=0)
            cout<<endl;
        }
        return 0;
    }
思路解析:

这道题可以根据题意直接模拟

输出的字符只有两个,空格和输入的字符,“8”可以分成两个圈圈,第一个圆圈的高度是 h/2,第二个圆圈的高度是剩下的 h - h/2,(注意h为奇数时,h - h/2  !=  h/2 )然后每个圆圈都是由两个字符串(a1,a2)形成的.

a1的字符串是:从“0”的位置开始,有 “i”个空格,i = h / 6 + 1;然后从“i”的位置开始,有"h - (h - 3)/2"个输入字符

a2的字符串是:从“0”的位置开始,有“i”个输入字符,i = h / 6 + 1;然后是另一半,所以a2 = a2 + a2;再然后从“i”的位置开始,有“h - (h - 3)/2”个空格,

其实,a1 和 a2相同的位置字符相反,只是a2还有输入字符的部分,而a1的那一部分是“空格”,开始初始化处理过了所以不用a1 = a1 + a1。

如果没有a2 = a2 + a2,输出结果为:

2
A 7
  AA
AA
AA
  AA
AA
AA
  AA

B 8
  BBB
BB
BB
  BBB
BB
BB
BB
  BBB

Process returned 0 (0x0)   execution time : 5.781 s
Press any key to continue.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值