题目大意
下面是一个乘法竖式,如果用我们给定的那n个数字来替代*,可以使式子成立的话,我们就叫这个式子牛式。
***
x **
----------
***
***
----------
****
数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。
输入格式
Line 1:数字的个数n。
Line 2:N个用空格分开的数字(每个数字都属于{1,2,3,4,5,6,7,8,9})。
输出格式
一个数字,牛式的总数
样例输入
5
2 3 4 6 8
样例输出
1
题解
需要注意,是式中所有*号都只能用所给数字表示,且数位不能多,不能少。
算出每行数字,挨个判断是否属于所给数字
代码
#include<stdio.h>
int a[9];
int n;
int find(int k)
{
int i;
for(i=0;i<n;i++)
if(a[i]==k)
return 1;
return 0;
}
int main()
{
int i,j,temp,count=0;
int a1,a2,a3,b1,b2,t,p,e,p1,p2,p3,e1,e2,e3,e4,t1,t2,t3,t4,d,f;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
for(a1=0;a1<n;a1++)
for(a2=0;a2<n;a2++)
for(a3=0;a3<n;a3++)
{
f=100*a[a1]+10*a[a2]+a[a3];
for(b1=0;b1<n;b1++)
for(b2=0;b2<n;b2++)
{
d=10*a[b1]+a[b2];
e=f*d;
p=f*a[b2];
t=f*a[b1];
if(e<=9999&&t<1000&&p<1000)
{
p3=p%10;
p=p/10;
p2=p%10;
p=p/10;
p1=p%10;
t3=t%10;
t=t/10;
t2=t%10;
t=t/10;
t1=t%10;
e4=e%10;
e=e/10;
e3=e%10;
e=e/10;
e2=e%10;
e=e/10;
e1=e%10;
if(find(p3)&&find(p2)&&find(p1)==1)
if(find(t3)&&find(t2)&&find(t1)==1)
if(find(e4)&&find(e3)&&find(e2)&&find(e1)==1)
{count++;}
}
}
}
printf("%d\n",count);
return 0;
}