谁画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
代码:
#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.