九度Online Judge 题目1432:叠筐 解答

九度Online Judge 题目1432:叠筐 解答

提交网址: http://ac.jobdu.com/problem.php?pid=1432

 

内存限制:128 兆       时间限制:1 秒

 

题目描述:

把一个个大小差一圈的筐叠上去,使得从上往下看时,边筐花色交错。这个工作现在要让计算机来完成,得看你的了。

输入:

输入是一个个的三元组,分别是,外筐尺寸n(n为满足0<n<80的奇整数),中心花色字符,外筐花色字符,后二者都为ASCII可见字符;

输出:

输出叠在一起的筐图案,中心花色与外筐花色字符从内层起交错相叠,多筐相叠时,最外筐的角总是被打磨掉。叠筐与叠筐之间应有一行间隔。


样例输入: 11 B A 5 @ W   样例输出:

  AAAAAAAAA
ABBBBBBBBBA
ABAAAAAAABA
ABABBBBBABA
ABABAAABABA
ABABABABABA
ABABAAABABA
ABABBBBBABA
ABAAAAAAABA
ABBBBBBBBBA
  AAAAAAAAA

 

   @@@
@WWW@
@W@W@
@WWW@
   @@@

 

 

分析:

这是排版题中的一种类型(无明显规律),它所要求的图形不具有显著的规律性或者规律性较难直接应用到输出当中。为了解决此类问题,可以采取一种方法:先完成排版,再进行输出


具体步骤:

1. 使用一个二维数组,从内向外一层层地填充字符(先完成1/4,然后使用竖直方向对称和对角线对称填充其他地方);

2. 去掉4个角(尺寸n=1时不处理).

 

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main()
{
    int n,k,i,j;
    char in_char,out_char; 
    while(cin>>n>>in_char>>out_char && ((n>0 && n<80) && n%2!=0) ) // 避免了 短路与 的歧义性
    {
        char s[n+1][n+1];
        memset(s,'0',sizeof s);
          
        char fill_char;
        int flag=0;           // flag用来记录框数的奇偶
        for(k=(n+1)/2;k>=1;--k)
        {
            flag++;
            if(flag%2==1) fill_char=in_char;
            else if(flag%2==0) fill_char=out_char;         
            for(i=k;i<=n+1-k;i++)
            {
                s[k][i]=fill_char;
                s[i][k]=fill_char;                // 与第一句的游标走向关于对角线对称
                s[i][n+1-k]=fill_char;        //  与第一句的游标走向关于竖直方向对称 
                s[n+1-k][i]=fill_char;        //  与第一句的游标走向关于水平方向对称
            }
        }      
            if(n!=1)
            {
                s[1][1]=' ';
                s[n][1]=' ';
                s[1][n]=' ';
                s[n][n]=' ';
            }      
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                cout<<s[i][j];
            }
            cout<<endl;
        }      
        cout<<endl;
    }  
    return 0;
}

/**************************************************************

    Problem: 1432
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:1520 kb
****************************************************************/



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白技术控

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值