USACO--crypt1

####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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章