Description
下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
* * *
x * *
-------
* * *
* * *
-------
* * * *
数字只能取代*,当然第一位不能为0,况且给定的数字里不包括0。
注意一下在美国的学校中教的“部分乘积”,第一部分乘积是第二个数的个位和第一个数的积,第二部分乘积是第二个数的十位和第一个数的乘积.
写一个程序找出所有的牛式。
Input
Line 1:数字的个数n。 Line 2:N个用空格分开的数字(每个数字都∈ {1,2,3,4,5,6,7,8,9})。
Output
共一行,一个数字。表示牛式的总数。
下面是样例的那个牛式。 2 2 2
x 2 2
---------
4 4 4
4 4 4
---------
4 8 8 4
Sample Input
5
2 3 4 6 8
Sample Output
1 题意:给你n个数字,使其乘法竖式里的每一个数字都是给出的数字,求牛式的个数。
分析:a满足100——999,b满足10——99,两个循环遍历,再判断每个数字是否是给出的那些数字,不是就继续找。判断:把出现的数字先标记一下
#include<cstdio>
#include<cstring>
int a[];
int judge(int x)
{
while(x)
{
if(a[x%]==)
return ;
x/=;
}
return ;
}//判断这个数字里面的数字是否是给出的
int main()
{
int n,m;
while(~scanf("%d",&n))
{
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
{
scanf("%d",&m);
a[m]=;
}//标记
int ans=;
for(int i=;i<=;i++)
{
if(judge(i)==)
continue;
for(int j=;j<=;j++)
{
int ans1;
ans1=i*j;
if(ans1>||judge(j)==||judge(ans1)==)
continue;
int ans2;
ans2=i*(j%);
if(ans2>||judge(ans2)==)
continue;
int ans3;
ans3=i*(j/);
if(ans3>||judge(ans3)==)
continue;
ans++;
}
}
printf("%d\n",ans);
}
return ;
}