小晴天老师系列——竖式乘法(暴力)
2015-05-24 11:52
441 查看
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,故只有一种填法。
题目大意:按照竖式乘法,给出算式中的几个数,求有多少种情况符合。
分析:只需枚举两个因数即可,剩下的格子根据乘法和加法规则确定。
另外,注意的一个技巧,求一个数的某一位数,就用这个数除以位数再对10取余,例:求1234的百位,(1234/100)%10 = 2
代码:
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,故只有一种填法。
题目大意:按照竖式乘法,给出算式中的几个数,求有多少种情况符合。
分析:只需枚举两个因数即可,剩下的格子根据乘法和加法规则确定。
另外,注意的一个技巧,求一个数的某一位数,就用这个数除以位数再对10取余,例:求1234的百位,(1234/100)%10 = 2
代码:
#include <cstdio> using namespace std; char s1[3], s2[2], s3[4], s4[3], s5[5]; int kase, ans; void judge(int a, int b, int x, int y, int sum) { for(int i = 0; i < 3; i++) { if(s1[i] != '*') { if(i == 0 && a/100 != s1[i]-'0') return; else if(i == 1 && (a/10)%10 != s1[i]-'0') return; else if(i == 2 && a%10 != s1[i]-'0') return; } } for(int i = 0; i < 2; i++) { if(s2[i] != '*') { if(i == 0 && b/10 != s2[i]-'0') return; else if(i == 1 && b%10 != s2[i]-'0') return; } } for(int i = 0; i < 4; i++) { if(s3[i] != '*') { if(i == 0 && x/1000 != s3[i]-'0') return; else if(i == 1 && (x/100)%10 != s3[i]-'0') return; else if(i == 2 && (x/10)%10 != s3[i]-'0') return; else if(i == 3 && x%10 != s3[i]-'0') return; } } for(int i = 0; i < 3; i++) { if(s4[i] != '*') { if(i == 0 && y/100 != s4[i]-'0') return; else if(i == 1 && (y/10)%10 != s4[i]-'0') return; else if(i == 2 && y%10 != s4[i]-'0') return; } } for(int i = 0; i < 5; i++) { if(s5[i] != '*') { if(i == 0 && sum/10000 != s5[i]-'0') return; else if(i == 1 && (sum/1000)%10 != s5[i]-'0') return; else if(i == 2 && (sum/100)%10 != s5[i]-'0') return; else if(i == 3 && (sum/10)%10 != s5[i]-'0') return; else if(i == 4 && sum%10 != s5[i]-'0') return; } } ans++; re 4000 turn; } int main() { scanf("%d", &kase); while(kase--) { ans = 0; scanf("%s", s1); scanf("%s", s2); scanf("%s", s3); scanf("%s", s4); scanf("%s", s5); for(int i = 100; i < 1000; i++) { for(int j = 10; j < 100; j++) { int x = i * (j%10); int y = i * (j/10); int sum = x + y*10; if(x >= 1000 && x < 10000 && y >= 100 && y < 1000 && sum >= 10000 && sum < 100000) { judge(i, j, x, y, sum); } } } printf("%d\n", ans); } return 0; }
相关文章推荐
- ACDREAM 02C 小晴天老师系列——竖式乘法(暴力专场)
- C -小晴天老师系列——竖式乘法
- ACDREAM 02G 小晴天老师系列——可恶的墨水瓶(暴力专场)
- acdream 小晴天老师系列——竖式乘法(简单穷举)
- [ACdream]小晴天老师系列——竖式乘
- acdream 小晴天老师系列——晴天的后花园 (暴力+剪枝)
- 小晴天老师系列--我有一个数列!(暴力)
- ACDREAM 02D 小晴天老师系列——晴天的后花园(暴力专场)
- ACDREAM 02E 小晴天老师系列——我有一个数列!(暴力专场)
- ACDREAM 02F 小晴天老师系列——苹果大丰收(暴力专场)
- F - 小晴天老师系列——苹果大丰收
- 小晴天老师系列——可恶的墨水瓶(floodfill)
- 小晴天老师系列——苹果大丰收(动态规划)
- D - 小晴天老师系列——晴天的后花园
- 数学老师从没这么教过,乘法竖式中进位可以是多位(附Python实现与测试源码)
- E - 小晴天老师系列——我有一个数列!
- G - 小晴天老师系列——可恶的墨水瓶
- 左老师经典系列文章回顾之“大学计算机那些课”
- C语言 · 猜算式 · 乘法竖式
- Lance老师UI系列教程第一课->QQ设置界面的实现(android)