【USACO题库】1.3.4 Prime Cryptarithm牛式

题目描述
下面是一个乘法竖式,如果用我们给定的那几个数字来取代*,可以使式子成立的话,我们就叫这个式子牛式。
      * * *
   x    * *
    -------
      * * *
    * * *
    -------
    * * * *

数字只能取代*,当然第一位不能为0。
写一个程序找出所有的牛式。

PROGRAM NAME: crypt1

INPUT FORMAT
Line 1:
数字的个数。

Line 2:
N个用空格分开的数字(每个数字都∈{1,2,3,4,5,6,7,8,9}) 。

SAMPLE INPUT (file crypt1.in)
5
2 3 4 6 8

OUTPUT FORMAT
共一行,一个数字。表示牛式的总数。下面是样例的那个牛式。
      2 2 2
    x   2 2
     ------
      4 4 4
    4 4 4
  ---------
    4 8 8 4

SAMPLE OUTPUT (file crypt1.out)

1



这题给我的感觉如上。


我们只要不停的枚举就可以了。


提示:每个数字的第一位不能是0。


鉴于长度太短,所以我决定放代码。。。

//usaco 1.3.4
var
        a:set of 0..9;
        i,j,k,n,ans:longint;

function pd(x,len:longint):boolean;
var
        s:string;
begin
        str(x,s);

        pd:=true;

        while x<>0 do
        begin
                if (x mod 10) in a then
                x:=x div 10
                else
                exit(false);
        end;

        if length(s)<>len then
        exit(false);
end;

begin
        readln(n);

        for i:=1 to n do
        begin
                read(j);

                a:=a+[j];
        end;

        for i:=111 to 999 do
        begin
                if pd(i,3) then
                for j:=11 to 99 do
                if (pd(j,2)) and (pd(i*(j mod 10),3)) and (pd(i*(j div 10),3)) and (pd(i*j,4)) then
                inc(ans);
        end;

        writeln(ans);
end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值