PTA 5 168

汉堡包在大街上大摇大摆的走着,看着手机上一道难倒数万人的小学数学题:

1 + 1 = 0

1 + 6 = 1

6 + 6 = 2

8 + 1 = 2

8 + 6 = 3

汉堡包看完之后发现上面这些加法的答案就是看1,6,8中圈圈的个数嘛!

突然之间,所有大厦上的LED屏幕上的广告全部变成数字1,6,8三个数字的随机闪现。

现给你一块n*m的LED屏幕,上面有且仅有一个数字(1,6,or 8),请你输出你看见的那个字母。

输入格式:

第一行输入两个整数n,m(2<= m, n <= 1000);

接下来n行,每行由m个数字0和1组成,其中1表示数字1,6,8的组成部分。

输出格式:

输出一个整数,代表图形表示的数字。

输入样例:

7 7
0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 1 0 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0

输出样例:

8

代码:

#include<stdio.h>
void appeared(int num1[], int num1_in_col)
// 判断变量 num1_in_col 的值是否在 num1[]里出现过.
// 如果为0,直接return.
// 如果没有,存入数组,并且用来统计的 num1[0]++.
// 如果有,直接return不进行操作.
{
    if (num1_in_col == 0) return;
    else if (num1[0] == 0)  // 数组为空,直接存入第一个非0值
    {
        num1[0] = 1;
        num1[1] = num1_in_col;
    }
    else
    {
        for (int i = 1; i <= num1[0]; i++)
        {
            if (num1_in_col == num1[i]) return;
        }
        num1[++num1[0]] = num1_in_col;
    }
}


int main()
{
    int m, n;   scanf("%d %d", &n, &m);
    int display[n][m];
    // num1[5]用来存储每一列出现的1的不同的值, num1_in_col来存储当前列1的数量
    //其中num1[0]用来存储不同1的个数(也就是num1数组的长度了)
    int i, j, num1[5] = {0}, num1_in_col;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            scanf("%d", &display[i][j]);
        }
    }
    for (i = 0; i < m; i++)
    {
        num1_in_col = 0;
        // 对列扫描,统计该列1出现的次数.
        for (j = 0; j < n; j++) {if (display[j][i] == 1) num1_in_col += 1;}
        // 使用appeared来判断该列1出现的次数是否在之前列出现过
        appeared(num1, num1_in_col);
    }
    if (num1[0] == 1)  // 1的值有1种情况
        printf("1");
    else if (num1[0] == 2) // 1的值有2种不同情况
        printf("8");
    else  // 1的值有3种不同情况
        printf("6");
    return 0;
}

总结:

        这道题刚拿到手其实是有点无头绪的,之后遇到高人指点才算稍微悟道

                1 1                                1 1 1 1 1 1 1 1                                1 1 1 1 1 1 1 1

                1 1                                1 1                                                  1 1             1 1

                1 1                                1 1 1 1 1 1 1 1                                1 1 1 1 1 1 1 1

                1 1                                1 1             1 1                                1 1             1 1

                1 1                                1 1 1 1 1 1 1 1                                1 1 1 1 1 1 1 1

1个数:      5 5                                5 5 3 3 3 3 4 4                                5 5 3 3 3 3 5 5

        上面是1,6,8的三个模型(省略0) 可以发现

                1:对于含有1的列,含有的1的数量只有1种

                6:对于含有1的列,含有的1的数量有3种

                8:对于含有1的列,含有的1的数量有2种

        因为题目保证有些仅有1/6/8,所以我们只要先读取地图,再统计含有1的就能做题了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值