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

  1. 2
  2. ***
  3. **
  4. 3384
  5. 846
  6. *****
  7. 4**
  8. **
  9. 3384
  10. 846
  11. *****

Sample Output

  1. 2
  2. 1

Hint

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

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

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

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

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. using namespace std;
  6. int Jude(int Num,char str[])/*产生的数是否和给定的数一样,一样的话返回1,否则返回0*/
  7. {
  8. int sign=,i;
  9. char STR[];
  10. sprintf(STR,"%d",Num); /*将Num转化为字符串保持在STR中*/
  11. int Len1=strlen(str);
  12. int Len2=strlen(STR);
  13. if(Len1==Len2) /*长度不一样的话,则结束结束判断,返回0*/
  14. {
  15. for(i=;i<Len1;i++) /*都完全匹配的话,sign才会等于1*/
  16. {
  17. if(str[i]=='*'||(str[i]==STR[i]))sign=;
  18. else {sign=;return sign;};
  19. }
  20. }
  21. else sign=;
  22. return sign;
  23. }
  24. int RetInt(int N,char a) /*把字符转化为数字返回*/
  25. {
  26. if(a=='*')return N;
  27. else return (a-'');
  28. }
  29. int main()
  30. {
  31. char a[],b[],c[],d[],e[];
  32. int Num1,Num2,Num3,Num4,Num5,T;
  33. int i,j,k,l,m,sign;
  34. scanf("%d",&T);
  35. while(T--)
  36. {
  37. scanf("%s %s %s %s %s",a,b,c,d,e);
  38. sign=;
  39. for(i=;i<=;i++)
  40. {
  41. if(a[]!='*')i=;/*若当前的数被指定,设置循环节为1*/
  42. for(j=;j<=;j++)
  43. {
  44. if(a[]!='*')j=;/*若当前的数被指定,设置循环节为1*/
  45. for(k=;k<=;k++)
  46. {
  47. if(a[]!='*')k=;/*若当前的数被指定,设置循环节为1*/
  48. Num1=RetInt(i,a[])*+RetInt(j,a[])*+RetInt(k,a[]);/*第一个数*/
  49. for(l=;l<=;l++)
  50. {
  51. if(b[]!='*')l=;/*若当前的数被指定,设置循环节为1*/
  52. for(m=;m<=;m++)
  53. {
  54. if(b[]!='*')m=;
  55. Num2=RetInt(l,b[])*+RetInt(m,b[]);/*获取第二个数*/
  56. if(Num1*Num2<)continue;/*剪枝,Num1*Num2结果需要是5位数*/
  57. Num3=Num1*(Num2%);
  58. if(Num3<)continue;/*剪枝,Num3结果需要是4位数*/
  59. Num4=(Num2/)*Num1;
  60. if(Num4>=)continue;/*剪枝,Num4结果需要是3位数*/
  61. Num5=Num1*Num2;
  62. if(Jude(Num3,c)&&Jude(Num4,d)&&Jude(Num5,e))
  63. {sign++;}/*判断如果产生的数能够和给定的数都匹配,则加1*/
  64. }
  65. }
  66. }
  67. }
  68. }
  69. printf("%d\n",sign);
  70. }
  71. return ;
  72. }

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. drag

    1.draggable ="true"  元素可以拖拽了 2.拖拽元素事件: dragstart  拖拽前触发 drag 拖拽前.拖拽结束之间,连续触发 dragend 拖拽结束触 ...

  2. 5、范围标签<fieldset></fieldset>

    <fieldset style="border:0;border:1px solid red;"> <legend style="background- ...

  3. vultr优惠码ssd vps赠送50美金,长期有效

    vultr最新优惠码.vultr vps注册教程,是大家关心的问题.网上流传很多vultr vps优惠码,鱼龙混杂,难以判断.其实,获取vultr优惠赠送美元的方式很简单. 第一种,新用户使用绑定信用 ...

  4. 使用android的mediaplayer做成 一个demo,欢迎测试使用

    附件是为一个定制视频产品而简单的写了一个demo,用来说明android的mediaplayer是如何使用的. http://files.cnblogs.com/guobaPlayer/palyerD ...

  5. 锅巴视频工作室 ----------------android端蓝牙测试demo--app

    android端蓝牙测试demo--app 这个是为一个客户做蓝牙项目时的一个测试demo,用来测试蓝牙单片机的收发情况,代码中没有做一些兼容性测试,请理解 锅巴视频工作室,专注于android视频相 ...

  6. 兼容不同浏览器的 CSS Hack 写法

    所谓 CSS Hack,是指在 CSS 代码中嵌入诸如 *,*html  等代码,方便于独立控制某种浏览器的具体样式.比如有些 CSS Hack 只能被 IE6 或 IE7 识别,而 Firefox ...

  7. 干货篇:揭开CSS盒模型神秘的面纱

    写博客可以对学习内容进行总结.分享和交流(面对面的技术分享会也不错)... 如果是单纯的记录,印象笔记完全够了. 步入正题,盒模型是web布局核心,掌握基础知识,以后实战中会如鱼得水~ 概念与历史 C ...

  8. Linux修改SSH端口和禁止Root远程登陆

    Linux修改ssh端口22 vi /etc/ssh/ssh_config vi /etc/ssh/sshd_config 然后修改为port 8888 以root身份service sshd res ...

  9. Java继承多态中的方法访问权限控制

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  10. zkw费用流

    期末结束,竞赛生活继续开始,先怒刷完寒假作业再说 至于期末考试,数学跪惨,各种哦智障错,还有我初中常用的建系大法居然被自己抛至脑后,看来学的还是不扎实,以后数学要老老实实学.物理被永哥黑了两分,然后很 ...