Prime Cryptarithm牛式

 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

==================================

由于告诉了式子的形式,所以就不用一位一位的去枚举的...

可以枚举111——999

                     11——99

                ------------------

                 111——999

               111——999     

               -------------------

             1111——9999

==================================

{
ID:jie19952
PROG:crypt1
LANG:PASCAL
}
var
  n:longint;
  a:array[1..9]of longint;
  f:array['0'..'9']of boolean;
procedure init;
begin
  assign(input,'crypt1.in');
  assign(output,'crypt1.out');
  reset(input); rewrite(output);
end;

procedure terminate;
begin
  close(input); close(output);
  halt;
end;

function check(t:longint):boolean;
var
  st:string;
  i:longint;
begin
  check:=true;
  str(t,st);
  for i:=1 to length(st) do
    if not f[st[i]] then exit(false);
end;

procedure main;
var
  i,j:longint;
  tem:longint;
  ans:longint;
begin
  readln(n);
  fillchar(f,sizeof(f),false);
  for i:=1 to n do
    begin
      read(a[i]);
      f[char(a[i]+ord('0'))]:=true;
    end;

  ans:=0;

  for i:=111 to 999 do
    if check(i) then
      for j:=11 to 99 do
        if (i*j<=9999)and check(j) then
          begin
            if ((i*(j mod 10))<=999)and (i*(j div 10)<=999) then
            if check(i*j) and check(i*(j mod 10)) and check(i*(j div 10)) then
              inc(ans);
          end;
  writeln(ans);
end;

begin
  init;
  main;
  terminate;
end.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值