Blog·Tanky WooABOUTRSS

HDOJ 2074 叠筐

01 Aug 2010
这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。

题目地址:

http://acm.hdu.edu.cn/showproblem.php?pid=2074

思路,用二位数组保存,先把四个角补齐,最后再改。

例如题目的例子:

11 B A


 AAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAA

补齐后可以改为:

AAAAAAAAAAA ABBBBBBBBBA ABAAAAAAABA ABABBBBBABA ABABAAABABA ABABABABABA ABABAAABABA ABABBBBBABA ABAAAAAAABA ABBBBBBBBBA AAAAAAAAAAA


 // Tanky Woo
// HDOJ 2074
// Accepted 2074 15MS 208K 1233B C++ Tanky Woo 
#include 
#include 
#include 
using namespace std;

char arr[85][85];
int main()
{
    int nNum;
    char _mid, _out;   // _mid中间的字符, _out外面的字符
    bool Is_first = 1;  // 是否是第一个实例,若是,则不输出空行
    while(scanf("%d %c %c", &nNum;, &_mid, &_out) != EOF)
    {
        if(!Is_first)
            printf("\n");
        Is_first = 0;
        memset(arr, 0, sizeof(arr));
        if(nNum == 1)     // 注意当n=1时,只输出中间的
        {
            printf("%c\n", _mid);
            continue;
        }
        arr[(nNum+1)/2][(nNum+1)/2] = _mid;
        int flag = 1;  // 输出外面 
        // 注意这里是从中间向外输出,现开始我以为外面便始终就是_out。错误~~
        for(int i=(nNum+1)/2-1; i>=1; --i)    
        {
            for(int j=i; j<=nNum-i+1; ++j)
            {
                if(flag)
                {
                    arr[i][j] = _out;   // 上横行
                    arr[j][i] = _out;   // 左竖行
                    arr[j][nNum-i+1] = _out;   // 右竖行
                    arr[nNum-i+1][j] = _out;   // 下横行
                }
                else
                {
                    arr[i][j] = _mid;   // 上横行
                    arr[j][i] = _mid;   // 左竖行
                    arr[j][nNum-i+1] = _mid;   // 右竖行
                    arr[nNum-i+1][j] = _mid;   // 下横行
                }
            }
            flag = !flag;
        }
        // 四个角改成空格
        arr[1][1] = ' ';
        arr[1][nNum] = ' ';
        arr[nNum][1] = ' ';
        arr[nNum][nNum] = ' ';
        for(int i=1; i<=nNum; ++i)
        {
            for(int j=1; j<=nNum; ++j)
                printf("%c", arr[i][j]);
            printf("\n");
        }
    }
    return 0;
}