画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)表示高度.
每组数据中有一个字符和一个整数,字符表示画笔,整数(>=5)表示高度.
Output
画横线总是一个字符粗,竖线随着总高度每增长6而增加1个字符宽.当总高度从5增加到6时,其竖线宽度从1增长到2.下圈高度不小于上圈高度,但应尽量接近上圈高度,且下圈的内径呈正方形.
每画一个"8"应空一行,但最前和最后都无空行.
每画一个"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;
}