加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

acdream 1704(暴力)

发布时间:2020-12-13 20:46:37 所属栏目:PHP教程 来源:网络整理
导读:题意: Problem Description 小晴天是ACdream团队中最牛的老师之1,他最善于数学运算~这天他翻开1本《AC is not a dream》杂志,发现最后1页有1道很经典的思惟题,题目很简单,每一个框填写1个数字,构成1个竖式,每一个数的最高位不能为0,但是有1些数字被

题意:
Problem Description

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

以下图:

然后小晴天2话不说,3下5除2就写出了答案:

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

多组数据,首先是1个整数t(t<=20),表示数据组数。
对每组数据,用5行表示1个竖式,每行均为1个字符串,仅含有星号(*)与数字(‘0’~’9’)组成,其中星号表示空白
其中第1行动长度为3的字符串。
第2行动长度为2的字符串。
第3行动长度为4的字符串。
第4行动长度为3的字符串。
第5行动长度为5的字符串。
Output

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

2


**
3384
846


4**
**
3384
846


Sample Output

2
1
题解:由于第1个乘数3位数,枚举从100到999,第2个乘数2位数,枚举从10到99,先去匹配已有值,不满足continue,否则得到第3个数字和第4个数字,再去匹配,不满足continue,否则得到最后1个数字,匹配成功答案加1。

#include <stdio.h> #include <string.h> char str[10][10]; int s[10][10]; int res = 0,flag[5] = {3,2,4,3,5}; void solve(int x) { for (int i = 0; i < flag[x]; i++) if (str[x][i] != '*') s[x][i] = str[x][i] - '0'; else s[x][i] = -1; } bool judge(int x,int cur) { int a = flag[cur] - 1,temp[10]; while (x > 0 && a >= 0) { int b = x % 10; if (s[cur][a] != -1 && s[cur][a] != b) return false; a--; x /= 10; } if (x == 0 && a == -1) return true; return false; } int main() { int t; scanf("%d",&t); while (t--) { for (int i = 0; i < 5; i++) { scanf("%s",str[i]); solve(i); } res = 0; for (int i = 100; i < 1000; i++) { if (!judge(i,0)) continue; for (int j = 10; j < 100; j++) { if (!judge(j,1)) continue; int temp1 = i * (j % 10); if (!judge(temp1,2)) continue; int temp2 = i * (j / 10); if (!judge(temp2,3)) continue; int temp = temp1 + temp2 * 10; if (!judge(temp,4)) continue; res++; } } printf("%d ",res); } return 0; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读