Cod sursa(job #465755)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 25 iunie 2010 12:56:41
Problema Ratphu Scor 20
Compilator fpc Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 4.71 kb
{7,11,13,17,19}
program alex;
var f:text;
    n,z,x:int64;
    cifpar,cifimp,zero,cinci,nr,s,c,p,i:longint;
begin
assign(f,'ratphu.in');reset(f);
readln(f,n,p);
close(f);
cifpar:=0;
cifimp:=0;
zero:=0;
cinci:=0;
nr:=0;
s:=0;
x:=n;
while n<>0 do
      begin
      c:=n mod 10;
      n:=n div 10;
      s:=s+c;
      if c mod 2=0 then inc(cifpar)
                   else inc(cifimp);
      if c=0 then inc(zero);
      if c=5 then inc(cinci);
      s:=s+c;
      nr:=nr+1;
      end;
cinci:=cinci+zero;
assign(f,'ratphu.out');rewrite(f);
if p=x then begin
            z:=1;
            for i:=2 to nr do
                z:=z*i;
            writeln(f,z);
            end
       else begin
            z:=0;
case p of
1:begin
  z:=1;
  for i:=2 to nr do
       z:=z*i;
  writeln(f,z);
  end;
2:begin
  z:=1;
  for i:=2 to nr-1 do
      z:=z*i;
  z:=z*cifpar;
  writeln(f,z);
  end;
3:begin
  if s mod 3=0 then begin
                    z:=1;
                    for i:=2 to nr do
                        z:=z*i;
                    writeln(f,z);
                    end
               else writeln(f,0);
  end;
4:begin
  if cifpar<2 then writeln(f,0);
  end;
5:begin
  if cinci=0 then writeln(f,0)
             else begin
                  z:=1;
                  for i:=2 to nr-1 do
                      z:=z*i;
                  z:=z*cinci;
                  writeln(f,z);
                  end;
  end;
6:begin
  if s mod 3=0 then begin
                    if cifpar=0 then writeln(f,0)
                                else begin
                                     z:=1;
                                     for i:=2 to nr-1 do
                                         z:=z*i;
                                     z:=z*cifpar;
                                     writeln(f,z);
                                     end;
                    end
               else writeln(f,0);
  end;
8:begin
  if cifpar=0 then writeln(f,0);
  end;
9:begin
  if s mod 9<>0 then writeln(f,0)
                else begin
                     z:=1;
                     for i:=2 to nr do
                         z:=z*2;
                     writeln(f,z);
                     end;
  end;
10:begin
   if zero=0 then writeln(f,0)
             else begin
                  z:=1;
                  for i:=2 to nr-1 do
                      z:=z*i;
                  z:=z*zero;
                  writeln(f,z);
                  end;
   end;
12:begin
   if(s mod 3<>0)or(cifpar=0)then writeln(f,0);
   end;
14:begin
   if cifpar=0 then writeln(f,0);
   end;
15:begin
   if s mod 3=0 then begin
                     if cinci=0 then writeln(f,0)
                                else begin
                                    z:=1;
                                    for i:=2 to nr-1 do
                                        z:=z*i;
                                    z:=z*cinci;
                                    writeln(f,z);
                                    end;
                     end
                else writeln(f,0);
   end;
16:begin
   if cifpar<2 then writeln(f,0);
   end;
18:begin
   if s mod 9=0 then begin
                     if cifpar=0 then writeln(f,0)
                                 else begin
                                      z:=1;
                                      for i:=2 to nr-1 do
                                          z:=z*i;
                                      z:=z*cifpar;
                                      writeln(f,z);
                                      end;
                     end
                else writeln(f,0);
   end;
20:begin
   if zero=0 then writeln(f,0)
             else begin
                  if zero=1 then begin
                                 if cifpar=0 then writeln(f,0)
                                             else begin
                                                  z:=1;
                                                  for i:=2 to nr-2 do
                                                      z:=z*i;
                                                  z:=z*cifpar;
                                                  writeln(f,z);
                                                  end;
                                 end
                            else begin
                                 z:=1;
                                 for i:=2 to nr-2 do
                                     z:=z*i;
                                 if cifpar<>0 then z:=z*zero*cifpar
                                              else z:=z*zero;
                                 writeln(f,z);
                                 end;
                  end;
   end;
end;
           end;
close(f);
end.