边界环绕路径

杭电2074叠筐

1.先摆出这有点坑的题目吧;题目不难但错误的次数真多啊;

Problem Description

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

Input

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

Output

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

Sample Input

11 B A

5 @ W

Sample Output

 AAAAAAAAA

ABBBBBBBBBA

ABAAAAAAABA

ABABBBBBABA

ABABAAABABA

ABABABABABA

ABABAAABABA

ABABBBBBABA

ABAAAAAAABA

ABBBBBBBBBA

 AAAAAAAAA

 

 @@@

@WWW@

@W@W@

@WWW@

 @@@

 题目分析不难;用二维数组来做,先把这些字符都存起来;然而统一输出即可;与蛇形填数有些类似

先不说这么多了直接拿代码分析吧;

#include<stdio.h>
int main()
{
    int i, d, k, a, j, flag=0;
    char b, c, m[100][100]={0},ch;
    while(scanf("%d %c %c",&a, &b, &c) != EOF){
        if(flag == 1){
            printf("\n");
        }
        flag = 1;
        if(a == 1){
            printf("%c\n",b);
            continue;
        }
        d = a/2;//中心位置;
        m[d][d] = b;
        for(k = 1; k <= d; k++){
            if(k%2 == 1){
                ch = c;
            }
            else     ch = b;
            for(i = d-k, j = d-k; i <= d+k; i++){
                m[i][j] = ch;
            }
            for(i = d+k, j = d-k; j <= d+k; j++){
                m[i][j] = ch;
            }
            for(i = d+k, j = d+k; i >= d-k; i--){
                m[i][j] = ch;
            }
            for(i = d-k, j = d+k; j >= d-k; j--){
                m[i][j] = ch;
            }
        } 
        m[0][0] = ' ';
        m[a-1][0] = ' ';
        m[a-1][a-1] = ' ';
        m[0][a-1] = ' ';
        for(i = 0; i < a; i++){
            for(j = 0; j < a; j++){
                printf("%c",m[i][j]);
            }
            printf("\n");
        }
        
    }
    
    
    return 0 ;
} 

 

先分析算法吧;m二维数组来存放字符;

1,找到中心位置,刚好是m[a/2][a/2];放入中心字符;

2,然后就走圈放字符到数组里面去;这里要找到边界(如代码的几个for语句就是这个意思);

3,最后在处理边框四角为空格的情况,这里只需要在上面赋值后再将那四个角的二维数组赋值一遍,即可;

4,最后在简单的输出二维数组即可;

 

好戏来了   我们来分析这些坑的细节格式的问题吧;

1;a==1语句
先看看这条语句吧;是不是没有想到啊;题目意思是从0到80 的奇数其中也是包括1的;
2;再让我们来看看flag的作用吧,是不是都想说这不就是跟放在后面的的换行一个意思吗;然而放在后的换行提交会是wa的;是不是很奇怪;再想想这二个有什么区别吧,没错把换行放在前面就是说输入一组数据才会有一个换行,而放在后面就是说每次输入数据之前就会出现换行,同于最后一个测试数据后面还有换行这与题目意思不同。题目只是说两个边框中间,有换行;则我们应该把换行放在前面;
是不是ac了;哈哈;现在来看是不是很

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值