hdu 1256 画8

画8

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4164    Accepted Submission(s): 1805


Problem Description
谁画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

 

/*题解:
    画图问题一直是自己的弱项,但是如今这样的题也做了好多道了吧,所以今天再次鼓起勇气面对这道曾经让我折戟的题,出人意料的第一次PE(注意格式每两个图之间有换行,最后一个图之后无空行)第二次A了,也是了却了一个心结,于是今天决定好好整理一下!
    发现做这样的题都是有一定技巧的。
    以前总是习惯这样做题:   

 要将图倒转,很不好控制


    在别人的提醒下,像这样的静态题原来这样做才简单正确(此题从一开始更加简单):


    
   对于此题,只需要将各种变量求出来,控制i的基础上,控制j就行,做起来简单明了

       形如:

注意:输出空格部分,为阴影部分(除去字符),即每一行之后都无空格,且无论是画8还是画X这样的画图题,都是这样控制格式的。


*/

代码:

#include<cstdio>
int main()
{
    int T,h1,h2,h,w,w1,i,j;
    char c;
    scanf("%d",&T);
    while(T--)
    {
        getchar();
        scanf("%c %d",&c,&h);
        w=h/6+1;
        h2=(h-2)/2;
        h1=h-h2-3;
        w1=h2;
        for(i=1; i<=h; i++)
        {
            for(j=1; j<=w1+2*w; j++)
            {
                if(i==1)
                {
                    if(j>=1&&j<=w)
                        printf(" ");
                    if(j>=w+1&&j<=w+w1)
                        printf("%c",c);
                }
                else if(i>=2&&i<=1+h1)
                {
                    if(j>=1&&j<=w)
                        printf("%c",c);
                    if(j>=w+1&&j<=w+w1)
                        printf(" ");
                    if(j>=w+w1+1&&j<=2*w+w1)
                        printf("%c",c);
                }
                else if(i==h1+2)
                {
                    if(j>=1&&j<=w)
                        printf(" ");
                    if(j>=w+1&&j<=w+w1)
                        printf("%c",c);
                }
                else if(i>=h1+3&&i<=h-1)
                {
                    if(j>=1&&j<=w)
                        printf("%c",c);
                    if(j>=w+1&&j<=w+w1)
                        printf(" ");
                    if(j>=w+w1+1&&j<=w*2+w1)
                        printf("%c",c);
                }
                else if(i==h)
                {
                    if(j>=1&&j<=w)
                        printf(" ");
                    if(j>=w+1&&j<=w+w1)
                        printf("%c",c);
                }
            }
            printf("\n");
        }
        if(T!=0) printf("\n");
    }
    return 0;
}
        

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值