题意:
给定n 个数 (每个数可重复使用) 求满足这个式子的种数
* * * * * ------- * * * <-- partial product 1 * * * <-- partial product 2 ------- * * * *
题解:
hash表记录该数是否可行,直接遍历三位数和两位数相乘。
/* ID:jsntrdy1 PROG: crypt1 LANG: C++ */
#include<cstdio>
#include<iostream>
#include<cstring>
#include<fstream>
const int N=10;
bool a[N];
//判断每数是否每位都在数组中
bool isOK(int n)
{
while(n)
{
int t=n%10;
if(a[t]==false)
return false;
n=n/10;
}
return true;
}
using namespace std;
ifstream fin("crypt1.in");
ofstream fout("crypt1.out");
int main()
{
int n,p,count=0;
fin>>n;
for(int i=0;i<n;i++)
{
fin>>p;
a[p]=true;
}
for(int i=111;i<=999;i++)
{
if(!isOK(i))
continue;
for(int j=11;j<=99;j++)
{
//保证位数
if(!isOK(j)||i*(j%10)>=1000)
continue;
if(i*j>=10000||i*(j/10)>=1000){
break;
}
if(isOK(i*(j%10))&&isOK(i*(j/10))&&isOK(i*j))
count++;
}
}
fout<<count<<endl;
cout<<count<<endl;
return 0;
}