題意:
Problem Description
小晴天是ACdream團(tuán)隊中最牛的老師之1,他最善于數(shù)學(xué)運算~這天他翻開1本《AC is not a dream》雜志,發(fā)現(xiàn)最后1頁有1道很經(jīng)典的思惟題,題目很簡單,每一個框填寫1個數(shù)字,構(gòu)成1個豎式,每一個數(shù)的最高位不能為0,但是有1些數(shù)字被隱藏掉了,然后讓你根據(jù)沒有隱藏的數(shù)字填出隱藏的數(shù)字。
以下圖:
然后小晴天2話不說,3下5除2就寫出了答案:
然后小晴天就覺得這樣的題目太簡單了,因而問你是不是有辦法來求出1道題目有多少種不同的答案呢?(只要有1個方框有不同的數(shù)字即為不同的答案)
Input
多組數(shù)據(jù),首先是1個整數(shù)t(t<=20),表示數(shù)據(jù)組數(shù)。
對每組數(shù)據(jù),用5行表示1個豎式,每行均為1個字符串,僅含有星號(*)與數(shù)字(‘0’~’9’)組成,其中星號表示空白
其中第1行動長度為3的字符串。
第2行動長度為2的字符串。
第3行動長度為4的字符串。
第4行動長度為3的字符串。
第5行動長度為5的字符串。
Output
對每組數(shù)據(jù),輸出1個整數(shù)x,表示符合乘法豎式法則的填法的種類。
Sample Input
2
**
3384
846
4**
**
3384
846
Sample Output
2
1
題解:由于第1個乘數(shù)3位數(shù),枚舉從100到999,第2個乘數(shù)2位數(shù),枚舉從10到99,先去匹配已有值,不滿足continue,否則得到第3個數(shù)字和第4個數(shù)字,再去匹配,不滿足continue,否則得到最后1個數(shù)字,匹配成功答案加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;
}
上一篇 velocity常用代碼
下一篇 實習(xí)感受