码迷,mamicode.com
首页 > 其他好文 > 详细

HDU2074 叠筐【图形打印】

时间:2015-02-08 00:31:37      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

题目链接:

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


题目大意:

打印一个两种花色层层交错的图形。给你最外环的尺寸N和两个字符表示花色A(中心

花色)、B(外环花色)。然后打印出这个图形。


思路:

用二维字符数组s[][]来存储图形。然后利用三重循环,一重k用来表示层数,剩下两重

表示第i行第j列的字符,将相应层数的字符存储进数组s[][]中,最后将它输出出来。


#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

char s[90][90];
int main()
{
    int N;
    char a,b;
    int ok = 0;
    while(cin >> N)
    {
        if(ok == 0)
            ok = 1;
        else
            cout << endl;
        memset(s,0,sizeof(s));
        cin >> a >> b;
        if(N == 1)
        {
            cout << a << endl;
            continue;
        }
        int m = (N+1)/2;    //层数
        if(m&1)
            swap(a,b);
        for(int k = 1; k <= m; ++k)
        {
            for(int i = k; i <= N-k+1; ++i)
            {
                for(int j = k; j <= N-k+1; ++j)
                {
                    if((i==1 && (j==1 || j==N)) || (i==N && (j==1 || j==N)))
                        s[i][j] = ' ';
                    else if(k&1 && (i==k||i==N-k+1))
                        s[i][j] = b;
                    else if(k&1 && (j==k||j==N-k+1))
                        s[i][j] = b;
                    else if(~(k&1) &&(i==k||i==N-k+1))
                        s[i][j] = a;
                    else if(~(k&1) && (j==k||j==N-k+1))
                        s[i][j] = a;
                }
            }
        }

        for(int i = 1; i <= N; ++i)
        {
            for(int j = 1; j <= N; ++j)
                cout << s[i][j];
            cout << endl;
        }
    }

    return 0;
}



HDU2074 叠筐【图形打印】

标签:

原文地址:http://blog.csdn.net/lianai911/article/details/43614145

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!