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

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

Hint

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

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

题目大意:如图所示的一个乘法计算过程,给定你对应位置的数字,*表示可以填任意值域。问你还有多少个填法能够让等式成立。

题解:弄5个for循环,分别对第一行的数和第二行的数进行枚举,然后再根据这个数计算出第三行和第四第五行的结果,再去判断下,产生的数是否都和给定位置的数一样,一样的话,可以填的方法加1。再加N个减枝,可以使原本的效率200+ms变成了20+ms。。。

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int Jude(int Num,char str[])/*产生的数是否和给定的数一样,一样的话返回1,否则返回0*/
{
int sign=,i;
char STR[];
sprintf(STR,"%d",Num); /*将Num转化为字符串保持在STR中*/
int Len1=strlen(str);
int Len2=strlen(STR);
if(Len1==Len2) /*长度不一样的话,则结束结束判断,返回0*/
{
for(i=;i<Len1;i++) /*都完全匹配的话,sign才会等于1*/
{
if(str[i]=='*'||(str[i]==STR[i]))sign=;
else {sign=;return sign;};
}
}
else sign=;
return sign;
}
int RetInt(int N,char a) /*把字符转化为数字返回*/
{
if(a=='*')return N;
else return (a-'');
}
int main()
{
char a[],b[],c[],d[],e[];
int Num1,Num2,Num3,Num4,Num5,T;
int i,j,k,l,m,sign;
scanf("%d",&T);
while(T--)
{
scanf("%s %s %s %s %s",a,b,c,d,e);
sign=;
for(i=;i<=;i++)
{
if(a[]!='*')i=;/*若当前的数被指定,设置循环节为1*/
for(j=;j<=;j++)
{
if(a[]!='*')j=;/*若当前的数被指定,设置循环节为1*/
for(k=;k<=;k++)
{
if(a[]!='*')k=;/*若当前的数被指定,设置循环节为1*/
Num1=RetInt(i,a[])*+RetInt(j,a[])*+RetInt(k,a[]);/*第一个数*/
for(l=;l<=;l++)
{
if(b[]!='*')l=;/*若当前的数被指定,设置循环节为1*/
for(m=;m<=;m++)
{
if(b[]!='*')m=;
Num2=RetInt(l,b[])*+RetInt(m,b[]);/*获取第二个数*/
if(Num1*Num2<)continue;/*剪枝,Num1*Num2结果需要是5位数*/
Num3=Num1*(Num2%);
if(Num3<)continue;/*剪枝,Num3结果需要是4位数*/
Num4=(Num2/)*Num1;
if(Num4>=)continue;/*剪枝,Num4结果需要是3位数*/
Num5=Num1*Num2;
if(Jude(Num3,c)&&Jude(Num4,d)&&Jude(Num5,e))
{sign++;}/*判断如果产生的数能够和给定的数都匹配,则加1*/
}
}
}
}
}
printf("%d\n",sign);
}
return ;
}

C -小晴天老师系列——竖式乘法的更多相关文章

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

    小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)   ...

  2. [ACdream]小晴天老师系列——竖式乘

    题目链接:http://acdream.info/contest?cid=1269#problem-C Problem Description 小晴天是ACdream团队中最牛的老师之一,他最擅长数学 ...

  3. acdream 小晴天老师系列——苹果大丰收(DP)

    小晴天老师系列——苹果大丰收 Problem Description 小晴天的后花园有好多好多的苹果树,某天,苹果大丰收~小晴天总共摘了M个苹果,我们假设苹果之间是不可分辨的. 为了保存苹果,小晴天买 ...

  4. acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)

    小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  5. G - 小晴天老师系列——可恶的墨水瓶

    G - 小晴天老师系列——可恶的墨水瓶 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Othe ...

  6. E - 小晴天老师系列——我有一个数列!

    E - 小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/O ...

  7. D - 小晴天老师系列——晴天的后花园

    D - 小晴天老师系列——晴天的后花园 Time Limit: 10000/5000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Oth ...

  8. F - 小晴天老师系列——苹果大丰收

    F - 小晴天老师系列——苹果大丰收 Time Limit: 2000/1000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Other ...

  9. acdream 小晴天老师系列——我有一个数列! (ST算法)

    小晴天老师系列——我有一个数列! Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)S ...

随机推荐

  1. matcaffe的blob维度顺序

    matcaffe是caffe的matlab接口.caffe本身是C++写的,其blob的维度顺序是[N,C,H,W],N表示batchSize,C表示channel数目,H表示feature map的 ...

  2. C#基础、基础知识点(新人自我总结,开启java学习之路)

    从2016年12月29开班,开课到现在C#基础已经算是简答的学习了一点,一个为期两周的课程,或多或少对现在学的Java有着一定的帮助吧,我们先从软件入门来接触c#这门语言: 一.软件开发中的常用术语: ...

  3. vue跨组件通信的几种方法

    http://www.tuicool.com/articles/jyM32mA 在开发组件的时候,一定会遇到组件的通信,比如点击一个图标出现弹窗和蒙层,这三个分别是不同的组件.管理他们之间的状态就成了 ...

  4. 安卓---Tabhost实现页面局部刷新--父页子页之间的传值

    TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 我只写 ...

  5. MSSQL2008 中文乱码问题 (引自ljg888的专栏)

    PHP向MSSQL2008中写入数据,中文乱码   首先:查看SQLserver编码格式的SQL语句为:     SELECT  COLLATIONPROPERTY('Chinese_PRC_Stro ...

  6. SQL in优化将In转化为联合查询

    in查询有时候会非常影响性能,最好能转化为联合查询,但有的网友说sqlserver会自动将in转化为联合查询,但我实际遇到的有时候却不是这样.所以最好还是不要用in. 我自己的例子,用in的时候耗费了 ...

  7. css中position中的几个属性

    static  是默认值.任意 position: static; 的元素不会被特殊的定位.一个 static 元素表示它不会被"positioned",一个 position 属 ...

  8. Blob写入文件

    1.Spring自带方法,定义输出流就可以写入文件 final OutputStream os; os = new FileOutputStream(new File("300.zip&qu ...

  9. Python ---------copy

    copy---探索 1.浅copy    就相当于把变量指针指向对象 相当于给对象从新起了个小名 a=[[1,2],3,4] a=[[1,2],3,4] b=a.copy() # print(a) # ...

  10. 如何判断Socket已经关闭

    引子 前段时间我们的服务由于一台交换机网络出现故障,导致数据库连接不上,但是在数据库的连接超时参数设置不合理,connect timeout设置的过长,导致接口耗时增加.DB连接超时后线程未正常结束, ...