andre_joy

导航

USACO crypt1

题意:给出1~9里面的一些数字,按题目所给公式填入这些数字使得结果成立,求有多少种组合方式。

mark:简单的枚举。我的代码比较暴力,可以用数组的形式简化。。。

代码:

/*
ID: andre_j2
LANG: C
TASK: crypt1
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int n;
int a[15];
int tem1,tem2,tem3,cnt;

int find(int m)
{
    int i;
    for(i = 0; i < n; i++)
        if(a[i] == m) return 1;
    return 0;
}

int fun(int x, int y)
{
    int i,j,k;
    i = tem1*x;
    j = tem1*y;
    k = i*10+j;
    if(i >= 1000 || j >= 1000 || k >= 10000) return 0;
    while(i)
    {
        if(!find(i%10)) return 0;
        i /= 10;
    }
    while(j)
    {
        if(!find(j%10)) return 0;
        j /= 10;
    }
    while(k)
    {
        if(!find(k%10)) return 0;
        k /= 10;
    }
    return 1;
}

main()
{
    freopen("crypt1.in", "r", stdin);
    freopen("crypt1.out", "w", stdout);
    int i,j,k,p,q;
    scanf("%d", &n);
    cnt = 0;
    for(i = 0; i < n; i++)
        scanf("%d", a+i);
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            for(k = 0; k < n; k++)
            {
                tem1 = a[i]*100+a[j]*10+a[k];
                for(p = 0; p < n; p++)
                    for(q = 0; q < n; q++)
                        if(fun(a[p], a[q])) cnt++;
            }
    printf("%d\n", cnt);
    exit(0);
}

posted on 2012-11-07 09:34  andre_joy  阅读(189)  评论(0编辑  收藏  举报