返回首页

pascal 宰相的麦子

71 2023-08-05 05:39 admin

一、pascal 宰相的麦子

只能用高精度了

program a1;

var

st :ansistring;

i,j :integer;

t :integer;

k :integer;

st1,st2 :ansistring;

len :integer;

m :integer;

begin

st:='1';

for i:=1 to 65 do

begin

len:=length(st);

t:=0;

st2:='';

for j:=len downto 1 do

begin

val(st[j],m);

m:=m*2;

k:=m mod 10+t;

t:=m div 10;

str(k,st1);

st2:=st1+st2;

end;

str(t,st1);if t<>0 then st2:=st1+st2;

st:=st2;

end;

for i:=1 to length(st)-1 do

write(st[i]);

val(st[length(st)],j);

write(j-1);

end.

二、pascal(case)

Var n,m:integer;

Begin

  readln(n,m);//输入n年和m月

  case m of

    1,3,5,7,8,10,12:writeln(31);

    4,6,9,11:writeln(30);

    2:if ((n mod 4=0)and(n mod 100<>0))or(n mod 400=0) Then writeln(29) else writeln(28);//根据平、闰年来判断2月有多少天

  End;

End.

三、free pascal快排

快速排序(递归算法)

procedure qsort(l,r:integer);

var i,j,mid,p:integer;

begin  i:=l;

  j:=r; 

  mid:=a[(l+r) div 2];                   //将当前序列在中间位置的数定义为中间数

  repeat

     while a[i]<mid do inc(i);        //在左半部分寻找比中间数大的数

     while a[j]>mid do dec(j);       //在右半部分寻找比中间数小的数

     if i<=j then 

      begin                                   //若找到一组与排序目标不一致的数对则交换它们

        p:=a[i];

        a[i]:=a[j];

        a[j]:=p;

        inc(i);  dec(j);                     //继续找

      end;

  until i>j;

  if l<j then qsort(l,j);                  //若未到两个数的边界,则递归搜索左右区间

  if i<r then qsort(i,r);

end;

program ex11_2;

var   a:array[1..20]of integer;

        n,i,m,x,y:integer;

procedure  jc(x,y:integer);                                             //递归过程

var  k:integer;

begin

   k:=(x+y)div 2;                                                                //取中间位置点

   if a[k]=m then writeln('then num in',k:5);                   //找到查找的数,输出结果

   if x>y then writeln('no find')                                         //找不到该数

      else begin

                   if a[k]<m then jc(k+1,y);                                //在后半中查找

                   if a[k]>m then jc(x,k-1);                                 //在前半中查找

              end;

end;

begin

   readln(n);

   x:=1;y:=n;

   for i:=1to n do  readln(a[i]);                                          //输入排序好的数

   readln(m);                                                                       //输入要查找的数

   jc(x,y);                                                                             //递归过程

   readln;

end.