####Prime Cryptarithm####
簡述:
給定一些數字(沒有零),滿足下圖的乘法豎式中凡每一個數都在這個數字集合中的,數字不限使用次數。有多少個這樣的豎式。
這是一個三位數乘以兩位數,需要枚舉的數不多,111999×1199;依次判斷符合標準的,以及過程中的數符合的。
代碼:
#include <stdio.h>
#include <stdlib.h>
int n, a[10];
int islegal(int x, int len);
int ina(int x);
int main(void)
{
freopen("crypt1.in", "r", stdin);
freopen("crypt1.out", "w", stdout);
int i, j,cnt = 0;
scanf("%d", &n);
for(i = 0; i < n; i++)
scanf("%d", &a[i]);
for(i = 111; i < 999; i++)
{
if(!islegal(i, 3))continue;
for(j = 11; j < 99; j++)
{
if(!islegal(j, 2))continue;
if(islegal(i * (j % 10), 3) && islegal(i * (j / 10), 3) && islegal(i * j, 4))
cnt++;
}
}
printf("%d\n", cnt);
return 0;
}
int islegal(int x, int len)
{
if(len == 2 && x > 99)return 0;
if(len == 3 && x > 999)return 0;
if(len == 4 && x > 9999)return 0;
while(x > 0)
{
if(!ina(x % 10))return 0;
x /= 10;
}
return 1;
}
int ina(int x)
{
int i;
for(i = 0; i < n; i++)
if(a[i] == x)
return 1;
return 0;
}