竖式乘法

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

Submit Status

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

  1 #include <iostream>
  2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <math.h>
  5 #include <string.h>
  6 using namespace std;
  7 #define lenstr 7
  8 char s1[lenstr],s2[lenstr],s3[lenstr],s4[lenstr],s5[lenstr];
  9 /**
 10 鉴于乘数内含有变量,我将每个都取出来,然后做到乘数内不变的数不变。
 11 起先使用标记,后面发现标记后的东西只能用一次。(过了当前循环就不能用了)
 12 后面改用上下限,就可以做到不变的量不变。
 13 感谢鑫哥。
 14 */
 15 int main()
 16 {
 17     int t,cou;
 18     scanf("%d",&t);
 19     getchar();
 20     while(t--)
 21     {
 22         cou=0;
 23         gets(s1);
 24         gets(s2);
 25         gets(s3);
 26         gets(s4);
 27         gets(s5);
 28         int min1=1,max1=9;
 29         if(s1[0]!=‘*‘) {min1=max1=s1[0]-‘0‘;}
 30         for(int a=min1;a<=max1; a++)
 31         {
 32             int min2=0,max2=9;
 33             if(s1[1]!=‘*‘) {min2=max2=s1[1]-‘0‘;}
 34
 35             for(int b=min2; b<=max2; b++)
 36             {
 37                 int min3=0,max3=9;
 38                 if(s1[2]!=‘*‘) {min3=max3=s1[2]-‘0‘;}
 39
 40                 for(int c=min3; c<=max3; c++)
 41                 {
 42                     int min4=1,max4=9;
 43                     if(s2[0]!=‘*‘) {min4=max4=s2[0]-‘0‘;}
 44
 45                     for(int d=min4; d<=max4; d++)
 46                     {
 47                         int min5=0,max5=9;
 48                         if(s2[1]!=‘*‘) min5=max5=s2[1]-‘0‘;
 49
 50                         for(int e=min5; e<=max5; e++)
 51                         {
 52                             int num1=a*100+b*10+c;
 53                             int num2=d*10+e;
 54                             int temp1=num1*e;
 55                             int temp2=num1*d;
 56                             int temp3=num1*num2;
 57                             char s[10],ss[10],sss[10];
 58
 59                             sprintf(s,"%d",temp1);
 60                             int len=strlen(s);
 61                             if(len!=4) continue;
 62                             int flag=0;
 63                             for(int i=0; i<len; i++)
 64                             {
 65                                 if(s3[i]==‘*‘) continue;
 66                                 else if(s3[i]!=s[i])
 67                                 {
 68                                     flag=1;
 69                                     break;
 70                                 }
 71                             }
 72                             if(flag) continue;
 73
 74                                 sprintf(ss,"%d",temp2);
 75                                 len=strlen(ss);
 76                                 if(len!=3) continue;
 77                                 for(int i=0; i<len; i++)
 78                                 {
 79                                     if(s4[i]==‘*‘) continue;
 80                                     else if(s4[i]!=ss[i])
 81                                     {
 82                                         flag=1;
 83                                         break;
 84                                     }
 85                                 }
 86                                 if(flag) continue;
 87
 88                                 sprintf(sss,"%d",temp3);
 89                                 len=strlen(sss);
 90                                 if(len!=5) continue;
 91                                 for(int i=0; i<len; i++)
 92                                 {
 93                                     if(s5[i]==‘*‘) continue;
 94                                     else if(s5[i]!=sss[i]) {flag=1;break;}
 95                                 }
 96                                 if(flag) continue;
 97                             //printf("%d %d %d %d %d  %d %d %d %d %d\n",a,b,c,d,e,num1,num2,temp1,temp2,temp3);
 98                             cou++;
 99                         }
100                     }
101                 }
102             }
103         }
104         printf("%d\n",cou);
105     }
106     return 0;
107 }

时间: 2024-10-07 23:24:51

竖式乘法的相关文章

【算法学习笔记】35.高精度 竖式乘法 SJTU OJ 1274

Description 输入a,b 输出a*b的竖式乘法,格式见样例. Sample Input1 11 9 Sample Output1 11 9 -- 99 Sample Input2 10 10 Sample Output2 10 10 --- 100 Sample Input3 101 101 Sample Output3 101 101 ----- 101 101 ----- 10201 Sample Input4 10086 2 Sample Output4 2 10086 ----

[ACDream]小晴天老师系列——竖式乘法

直接上题目: 小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本<AC is not a dream>杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为

【acdream】小晴天老师系列——竖式乘法

C - 小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本<AC is not a dream>杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为0,但

acdream 小晴天老师系列——竖式乘法(简单穷举)

小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学运算~这天他翻开一本<AC is not a dream>杂志,发现最后一页有一道很经典的思维题,题目很简单,每个框填写一个数字,构成一个竖式,每个数的最高位不能为0,但是有一些数字被隐藏掉了,然后让你根据

数学竖式排版中不为人知的技巧

在使用mathtype的过程中,难免会遇到一些不知道怎么操作的情况,这个时候我们就需要去找一些教程来学习一下.数学数式一般涉及到三种类型,即算术“加.减.乘.除”的竖式,代数多式加法.乘法.除法的排法,开平方竖式的排法.本教程将介绍数学竖式排版的一些技巧. (1)算术“加.减.乘.除”的竖式,其整数.小数位一般在4位以内,数码与数码之间一律疏排,2位数空对开,3位.4位数空三分.数式一般用三号.四号或小四号的正体数码字排版.乘法和除法竖式均为多层重叠.如下图所示: (2)代数多项式加法.乘法.除

大数运算——字符串操作结合“竖式计算“思想的实现

总体原则: 字符串转整形数组,然后按照“竖式计算”的思想,按位(对于数组来说,就是对应位置的元素)进行运算,同时处理进位.退位.最后将整形数组转换为字符串输出. Ps:1.字符串转整形,本文采取逆序存储的方式,即将字符串的低位(大数的高位)放置到整形数组的高位. 2.本文提供的四个四则运算方法,所有的输入值(大数)必须为正整数. 一.加法 加法运算遵循从低位到高位运算的法则.将字符串转换为整形数组后,两数组对应元素相加,结果存储至结果数组的相应元素位置.同时对相加后的元素进行整除和取余运算(整除

除法竖式

被除数:  除 数: 除法竖式,布布扣,bubuko.com

竖式问题——巧用字符数组

竖式问题 题目: 找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合.输入数字集合(相邻数字之间没有空格),输出所有竖式.每个竖式前应有编号,之后应有一个空行.最后输出解的总数.具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点).   样例输入: 2357 样例输出: <1> ..775 X..33 ----- .2325 2325. ----- 25575 The number of sol

竖式回转窑预热器由哪些构造构成

1.预热器本体:它是确保物料预热到900摄氏度摆布的最重要有些,它是由预热室.悬挂设备及耐火砖衬(该项不属于设备设计制作范围)等有些构成.该有些的构造大有些是金属构件,有些资料根据需要选用了耐热钢,耐热钢能在1000~1100摄氏度高温下作业.另外,耐火砖衬构造设计新颖.密封性好,能确保物料在预热器内均匀预热并到达预热温度. 2.推料设备:首要包含推头.结构和连杆等有些,推头选用耐热钢锻造或焊接而成,能接受高温,凭借电控和液压体系,各个液压推杆能按主动控制程序完成依次推料. 3.(回转窑设备)上