算法教程5

综合测试题(二)
1、回文问题:递归法判断所输入的一行字符是否回文。这里所说的回文是指输入的一行字符,
以“-”字符为中心,其两边的字符是左右对称的。例如:
    输入:ABCDE-EDCBA ↓
    输出:It is symmetry.  {输入一行字符是回文}
    [解]设一行字符为M-W,对于M分解成由ch1表记的一个字符与一子串m;对w分解成一字符子串w和由ch2表记的一个字符,因此M-W这“回文”取决于:(1)m-w是回文;(2)ch1-ch2。即将原问题递推到m-w的解。递归终止条件是M与W(或m与w)长度为0。“回归”时,若m-w是回文且ch1=ch2,则M-W是回文;否则M-W就不是回文。程序使用递归过程pp。
    [程序]

    PROGRAM MW;
    var ch:char;
    function pp:boolean;
    var ch1,ch2:char; bl:boolean;
    begin read(ch1);
      if ch1=';-'; then bl:=true
      else begin
if pp then begin read(ch2);bl:=ch1=ch2;end
        else bl:=false;
      end;
      pp:=bl;
  end;
    begin {MAIN}
      write(';Input string:';);
      if pp then begin read(ch);
        if ord(ch)=13 then begin writeln;writeln(';It is symmetry.';);end
        else begin writeln;writeln(';It is not symmetry.';);end;
      end
    else begin writeln;writeln(';It is not symmetry.';);end
  end.

2、三齿轮问题:三个齿轮啮合。如图在齿轮箱里
    三个齿轮互相衔接,某瞬间两对齿相遇,问各转
    多少圈后,这两对齿同时重逢。如图示。
    (说明:用a,b,c分别表示三个齿轮的齿数。)
    [解]这一问题是最小公倍数问题。设三齿轮齿数分别是na、nb、nc,[na,nb,nc]为最小公倍数,相遇各齿轮所转的圈数为最小公倍数除以自己的齿数。
    [程序]
     {$I-}

     program cl;
     var na,nb,nc,ma,mb,mc,l3:integer;
     
     function gcd(x,y:integer):integer; { 求最大公约数函数 }
     var r:integer;
     begin
       repeat r:=x mod y;x:=y;y:=r;until r=0;
       gcd:=x;
     end;
     function lcm(x,y:integer):integer; { 求最小公倍数函数 }
     begin lcm:=(x*y div gcd(x,y));
     end;
     function lcm3(a1,a2,a3:integer):integer; { 求三个数的最小公倍数函数 }
     begin lcm3:=lcm(lcm(a1,a2),a3); end;
     begin {
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值