• NO.1


    题目:(来自ACdream)

    C - 小晴天老师系列——竖式乘法

    Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)

    Problem Description

    小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本《AC is not a dream》杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为0,但是有一些数字被隐藏掉了,然后让你根据没有隐藏的数字填出隐藏的数字。

     

    如下图:

     

    然后小晴天二话不说,三下五除二就写出了答案:

     

    然后小晴天就觉得这样的题目太简单了,于是问你是否有办法来求出一道题目有多少种不同的答案呢?(只要有一个方框有不同的数字即为不同的答案)

    Input

    多组数据,首先是一个整数t(t<=20),表示数据组数。

    对于每组数据,用5行表示一个竖式,每行均为一个字符串,仅含有星号(*)与数字('0'~'9')组成,其中星号表示空白

    其中第一行为长度为3的字符串。

    第二行为长度为2的字符串。

    第三行为长度为4的字符串。

    第四行为长度为3的字符串。

    第五行为长度为5的字符串。

    Output

    对于每组数据,输出一个整数x,表示符合乘法竖式法则的填法的种类。

    Sample Input

    2

    ***

    **

    3384

    846

    *****

    4**

    **

    3384

    846

    *****

    Sample Output

    2

    1

    Hint

    样例1,除了题目中的那种情况,还有这种

     

    而样例2,因为第一个数的百位被固定为4,故只有一种填法。

    (-/--)具体思路:

             首先开一个二维数组来存放输入,用两个for来遍历乘数,被乘数从100到999,乘数从10到99,将他们的各个位分开,对应二维数组的输入,如果二维数组中的该位不是*且不等于该数,说明这个数不满足条件,首先通过第一行和第二行的星号与否淘汰一部分数,再通过第三行和第四行淘汰一部分,如果剩下的还能通过最后一行的检测,计算器就++.

    (-/--)AC代码:

    #include<stdio.h>

    int main()

    {

      int i,j,t,a,b,c,h1[1010],h2[110];     //h1和h2数组用来记录通过第一轮的数

      int a1,a2,a3,a4,a5,co,h;          //a1,a2等全部都是用来记录各个位的数字

      char s[5][10];                 //接收输入

      while(scanf("%d",&t)!=EOF)

      {

        while(t--)

        {

          for(i=0;i<5;i++)

            scanf("%s",s[i]);

                       //第一轮

          for(i=100;i<1000;i++)

          {

            h1[i]=0;

            a=i/100;

            b=i%100/10;

            c=i%10;

            if(s[0][0]!='*'&&s[0][0]-'0'!=a) continue;

            if(s[0][1]!='*'&&s[0][1]-'0'!=b) continue;

            if(s[0][2]!='*'&&s[0][2]-'0'!=c) continue;

            h1[i]=1;                       //满足条件

          }

          for(i=10;i<100;i++)

          {

            h2[i]=0;

            a=i/10;

            b=i%10;

            if(s[1][0]!='*'&&s[1][0]-'0'!=a) continue;

            if(s[1][1]!='*'&&s[1][1]-'0'!=b) continue;

            h2[i]=1;

          }

          for(co=0,i=100;i<1000;i++)     //co计数

          {

            if(h1[i]==1)

            {

              for(j=10;j<100;j++)

              {

                if(h2[j]==1)

                {

                  a=j/10;

                  b=j%10;

                  if(i*b<1000) continue;     //因为第三行有四位,所以相乘小于1000的淘汰

                  h=i*b;

                  a1=h/1000;

                  a2=h%1000/100;

                  a3=h%100/10;

                  a4=h%10;

                  if(s[2][0]!='*'&&s[2][0]-'0'!=a1) continue;

                  if(s[2][1]!='*'&&s[2][1]-'0'!=a2) continue;

                  if(s[2][2]!='*'&&s[2][2]-'0'!=a3) continue;

                  if(s[2][3]!='*'&&s[2][3]-'0'!=a4) continue;

                  if(i*a>999) continue;       //同理

                  h=i*a;

                  a1=h/100;

                  a2=h%100/10;

                  a3=h%10;

                  if(s[3][0]!='*'&&s[3][0]-'0'!=a1) continue;

                  if(s[3][1]!='*'&&s[3][1]-'0'!=a2) continue;

                  if(s[3][2]!='*'&&s[3][2]-'0'!=a3) continue;

                  if(i*j<10000||i*j>99999) continue;     //同理

                  h=i*j;

                  a1=h/10000;

                  a2=h%10000/1000;

                  a3=h%1000/100;

                  a4=h%100/10;

                  a5=h%10;

                  if(s[4][0]!='*'&&s[4][0]-'0'!=a1) continue;

                  if(s[4][1]!='*'&&s[4][1]-'0'!=a2) continue;

                  if(s[4][2]!='*'&&s[4][2]-'0'!=a3) continue;

                  if(s[4][3]!='*'&&s[4][3]-'0'!=a4) continue;

                  if(s[4][4]!='*'&&s[4][4]-'0'!=a5) continue;

                  co++;

                }

              }

            }

          }

          printf("%d ",co);

        }

      }

      return 0;

    }

  • 相关阅读:
    全卷积神经网络FCN
    面试题 —— 面向对象
    【一题多解】平方根的计算及完全平方数的判断
    【一题多解】Python 字符串逆序
    JVM 自带性能监测调优工具 (jstack、jstat)及 JVM GC 调优
    n 中选 m —— 随机采样的艺术
    位图(bitmap)—— C语言实现
    C++ STL 数据结构与算法 —— 排序
    斐波那契 —— 矩阵形式推导
    常用文本编辑器 editor 的常用插件 —— CopyEdit
  • 原文地址:https://www.cnblogs.com/hchlqlz-oj-mrj/p/4454190.html
Copyright © 2020-2023  润新知