您的位置:首页 > 其它

杭电2074 叠筐 二维数组

2016-03-15 16:24 281 查看

杭电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了;哈哈;现在来看是不是很坑;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: