首页 > ACM题库 > HDU-杭电 > HDU 1256 画8[解题报告] C++
2013
12-04

HDU 1256 画8[解题报告] C++

画8

问题描述 :

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

输入:

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

输出:

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

样例输入:

2
A 7
B 8

样例输出:

  AA
AA  AA
AA  AA
  AA
AA  AA
AA  AA
  AA

  BBB
BB   BB
BB   BB
  BBB
BB   BB
BB   BB
BB   BB
  BBB

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1256

题意:中文……

mark:写的中间就发现用自定义函数会少很多代码。。

代码:

#include <stdio.h>

int main()
{
    int n,m,p,s;
    int i,j,k;
    char a;
    scanf("%d%*c", &n);
    k = 0;
    while(n-- && scanf("%c %d%*c", &a, &m))
    {
        if(k++) puts("");
        s = m/6+1;
        p = (m-3)/2;
        m = m-3-p;
        for(j = 0; j < s; j++)
            putchar(' ');
        for(i = 0; i < m; i++)
            putchar(a);
        puts("");
        for(i = 0; i < p; i++)
        {
            for(j = 0; j < s; j++)
                putchar(a);
            for(j = 0; j < m; j++)
                putchar(' ');
            for(j = 0; j < s; j++)
                putchar(a);
            puts("");
        }
        for(j = 0; j < s; j++)
            putchar(' ');
        for(i = 0; i < m; i++)
            putchar(a);
        puts("");
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < s; j++)
                putchar(a);
            for(j = 0; j < m; j++)
                putchar(' ');
            for(j = 0; j < s; j++)
                putchar(a);
            puts("");
        }
        for(j = 0; j < s; j++)
            putchar(' ');
        for(i = 0; i < m; i++)
            putchar(a);
        puts("");
    }
    return 0;
}

  1. 漂亮。佩服。
    P.S. unsigned 应该去掉。换行符是n 不是/n
    还可以稍微优化一下,
    int main() {
    int m,n,ai,aj,bi,bj,ak,bk;
    while (scanf("%d%d",&m,&n)!=EOF) {
    ai = sqrt(m-1);
    bi = sqrt(n-1);
    aj = (m-ai*ai-1)>>1;
    bj = (n-bi*bi-1)>>1;
    ak = ((ai+1)*(ai+1)-m)>>1;
    bk = ((bi+1)*(bi+1)-n)>>1;
    printf("%dn",abs(ai-bi)+abs(aj-bj)+abs(ak-bk));
    }
    }

  2. 这道题这里的解法最坏情况似乎应该是指数的。回溯的时候
    O(n) = O(n-1) + O(n-2) + ….
    O(n-1) = O(n-2) + O(n-3)+ …
    O(n) – O(n-1) = O(n-1)
    O(n) = 2O(n-1)

  3. L(X [0 .. M-1],Y [0 .. N-1])= 1 + L(X [0 .. M-2],Y [0 .. N-1])这个地方也也有笔误
    应改为L(X [0 .. M-1],Y [0 .. N-1])= 1 + L(X [0 .. M-2],Y [0 .. N-2])