题目描述
下面是一个乘法竖式,如果用我们给定的那n个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
* * *
x * *
-------
* * *
* * *
-------
* * * *
数字只能取代*,当然第一位不能为0。 写一个程序找出所有的牛式。
输入格式
第一行:数字的个数n。
第二行:N个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9})。
输出格式
共一行,一个数字。表示牛式的总数。 下面是样例的那个牛式。
2 2 2
x 2 2
---------
4 4 4
4 4 4
----------
4 8 8 4
输入样例 复制
5
2 3 4 6 8
输出样例 复制
1
算法解析
思路很简单,先枚举两个乘数在进行判断,最后得出结果
代码如下
#include<bits/stdc++.h>
using namespace std;
bool a[10];
int n,ans;
bool check(int x)
{
int y;
while(x>0)
{
y=x%10;
if(!a[y])
return 0;
x/=10;
}
return 1;
}
int main()
{
cin>>n;
int x,y;
for(int i=1;i<=n;i++)
{
cin>>x;
a[x]=1;
}
for(int i=100;i<=999;i++)
for(int j=10;j<=99;j++)
{
x=j/10;
y=j%10;
if(x*i>=1000||y*i>=1000||i*j>=10000)
continue;
if(!check(i)||!check(j)||!check(x*i)||!check(y*i)||!check(i*j))
continue;
ans++;
}
cout<<ans;
return 0;
}