求C++问题【残缺不全的乘式(crypt.pas/c/cpp)】【问题描述】一个残缺不全的乘式是指乘式中某些数字

求C++问题【残缺不全的乘式(crypt.pas/c/cpp)】【问题描述】一个残缺不全的乘式是指乘式中某些数字
【问题描述】
一个残缺不全的乘式是指乘式中某些数字或全部数字都被蛀虫蛀得辨别不出了,每行的第一个数字不能为0,这个乘式也许有多种解,如下所示:
* * *
x * *
---------------------
* * * *
* * * *
-----------------------
* * * * *
这儿是一个简单的解.
775
33
-----------
2325
2325
----------
25575
写一个程序读入一组数字,仅用这些数字,求给出的乘式有多少个解.

【输入格式】(输入文件名为crypt.in)
第一行是一个整数n(1
1389913899 1年前 已收到1个回答 举报

气泡鱼 春芽

共回答了15个问题采纳率:100% 举报

#include

int total;
int num[10],a[10],n,has[10];

int judge(int number)
{
while(number)
{
if(!has[ number % 10 ]) return 0;
number /= 10;
}
return 1;
}

int check(int a,int b)
{
if(a < 100) return 0;
if(b < 10) return 0;
if(!judge(a * num[4]) || !judge(a * num[3]) || !judge(a*b)) return 0;
if(a * num[4] < 1000) return 0;
if(a * num[4] >= 10000) return 0;
if(a * num[3] < 1000) return 0;
if(a * num[3] >= 10000) return 0;
if(a * b < 10000) return 0;
if(a * b >= 100000) return 0;
return 1;
}

void dfs(int dep)
{
if(dep == 5)
{
int a = num[0] * 100 + num[1] * 10 + num[2];
int b = num[3] * 10 + num[4];
if(check(a,b))
{
//printf("%6dn*%5dn-------n%6dn %dn------n%6dn",a,b,a*num[4],a*num[3],a*b);
total ++;
}
return ;
}
int i;
for(i=0;i{
num[dep] = a[i];
dfs(dep+1);
}
}

int main()
{
freopen("crypt.in","r",stdin);
freopen("crypt.out","w",stdout);
int i;
while(~scanf("%d",&n))
{
total = 0;
for(i=0;i<10;i++) has[i] = 0;
for(i=0;i{
scanf("%d",&a[i]);
has[a[i]] = 1;
}
dfs(0);
printf("%dn",total);
}
return 0;
}

1年前

4
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.069 s. - webmaster@yulucn.com