开始时用数组对给出的数字加以标记,然后三位数 111--999 两位数11--99分别相乘加以判断。
/*
ID: acmerfi1
PROG: crypt1
LANG: C++
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 12
int N;
int hash[12], num, sum = 0;
int exsit(int number) //判断是否在给定的数字中
{
while(number)
{
if(hash[number%10]) number /= 10;
else return 0;
}
return 1;
}
int countDigit(int i, int j) // 计算乘积的位数
{
int sum = i * j;
int count = 0;
if(exsit(i) && exsit(j) && exsit(sum))
{
while(sum)
{
count++;
sum /= 10;
}
}
else return 0;
return count;
}
int judge(int i, int j) // 判断是否满足题目中的条件
{
if(4 == countDigit(i, j) && 3 == countDigit(i, j%10) && 3 == countDigit(i, j/10))
{
return 1;
}
else return 0;
}
int main()
{
freopen("crypt1.in", "r", stdin);
freopen("crypt1.out", "w", stdout);
memset(hash, 0, sizeof(num));
scanf("%d", &N);
for(int i = 0; i < N; i++)
{
scanf("%d", &num);
hash[num] = 1;
}
for(int i = 111; i <= 999; i++)
{
for(int j = 11; j <= 99; j++)
{
if(judge(i,j)) sum++;
}
}
printf("%d\n", sum);
return 0;
}