zoukankan      html  css  js  c++  java
  • 2020 vs 2018

    题目链接:https://ac.nowcoder.com/acm/contest/9699/B

    题目描述:

    Bobo有一副 n 行 m 列,只包含 '.' 和 'o' 两种字符的字符画,其中 '.' 是背景,'o' 画出了2018或者2020。请识别给出的字符画是2018还是2020的。

    输入描述:

    输入文件包含多组数据,请处理到文件结束。
    每组数据的第一行包含两个整数 n 和 m,接下来的 n 行每行包含 m 个字符表示字符画。
     · 1 ≤ n, m ≤ 50
     · 数据组数不超过 100.
     · 字符画
      ·· 只包含 '.' 和 'o' 两种字符;
      ·· 只会是2018或者2020的字符画;
      ·· 不同数字的字符 'o' 不会(在8个方向上)相邻
      ·· 壁画都是水平或者竖直的,但是大小和位置都可能任意出现。

    输出描述:

    对于每组数据,如果给出的字符画是2020,输出2020,否则输出2018。

    示例:

    输入:

    6 14
    ..............
    .oo.ooo.oo.ooo
    ..o.o.o..o.o.o
    .oo.o.o.oo.o.o
    .o..o.o.o..o.o
    .oo.ooo.oo.ooo
    6 14
    ....ooo....ooo
    .oo.o.o..o.o.o
    ..o.o.o..o.ooo
    .oo.o.o..o.o.o
    .o..ooo..o.o.o
    .oo......o.ooo
    11 12
    ooo...ooo...
    o.o.....o...
    ooo...ooo...
    ......o.....
    ooooo.o.ooo.
    o...o.o...o.
    o...o.ooo.o.
    o...o.....o.
    o...o...ooo.
    o...o...o...
    ooooo...ooo.

    输出:

    2020
    2018
    2020

    题目解析:

    2020和2018的区别就在于8的不同(如图所示)

     假定上图为一个长11宽3的二维数组a。黄色,红色部分为'o'。白色部分为‘.’。上图表示一个8再图中的储存方式。

    那么如图所示的a[3][6]的上面,左边和下面这些地方一定存有元素'o'。

    由于题目已经限定不同数字之间都会有分割,所以 0 1 2 一定不会出现这种结构。

    所以只需要遍历整个二维数组,找出a[p][q]=='o'&&a[p][q-1]=='o'&&a[p-1][q]=='o'&&a[p+1][q]=='o'为真就能确定画出的图为2018还是2020。

    同理:

    如下结构同样能够判别‘8’(蓝色部分)

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        ios::sync_with_stdio(false);
        int num1, num2, all;
        bool flag = false;
        char a[55][55];
        while (cin >> num1 >> num2)
        {
            memset(a, 0, sizeof(a));
            for (int z = 1;z <= num1;z++)
                for (int k = 1;k <= num2;k++)
                    cin >> a[z][k];
    
            for (int p = 1;p <= num1;p++)
                for (int q = 1;q <= num2;q++)
                    if (a[p][q] == 'o' && a[p][q + 1] == 'o' && a[p - 1][q] == 'o' && a[p + 1][q] == 'o')
                    {
                        flag = true;
                        break;
                    }
    
            if (flag)
                cout << "2018" << endl;
            else
                cout << "2020
    " << endl;
            flag = false;
        }
        return 0;
    }
     
  • 相关阅读:
    【转】QT创建子对话框的方法
    IplImage转为Mat的方法
    浅谈Android选项卡(二)
    浅谈Android选项卡(一)
    Android来电、去电监听
    文件加密
    Java实现文件重命名
    使用单个httpclient实例请求数据。
    获取Android状态栏的高度
    [置顶] 微软翻译接口
  • 原文地址:https://www.cnblogs.com/zjw1324399/p/14269558.html
Copyright © 2011-2022 走看看