删除奇位数

Author: 广西柳州市一职高90微机班 谢笛鸣 Date: 1992-12-04

        从1~N个数中,刷去奇号位的数,然后把剩下的数重新按序排列,(即向前挪,填上刚刚刷去的数的空位),再刷去奇号位的数,问如此这样最后剩几?
        这道题比较简单,传统作法是借助计算机强大的运算速度支持,照题设模拟,即设立一个数组,装1~N个数,然后刷掉奇号位上的数,又重新排列,再刷掉奇号位上的数,这样做,程序较长,且N较大时,耗时较多。其实这道题可以这样想,一串数中,把奇号位上的数刷去,就是拿每个号位数除以2,得到的商不是整数的去掉,(即奇号位数)得到的商是整数时,所得的商就是该数的下一轮顺序中所在的号数,可见,在一串数中哪一个数所含因子2最多,就为最后剩下的数,这样的话,我们就可以这样去完成该题,每次累乘2,当大于N时,则所得的数除以2就是最后剩下的数。
        下面就是依上算法,所得程序
        10 INPUT “n=”;N:T=1
        20 T=T*2:IF T>N THEN PRINT T/2:END:ELSE GOTO 20
        以上程序由于每次乘2,增长速度快,对大数也不成问题,另外最重要的是它把在众多数中去删选数转化成去直接找数,大大减少了无用功,也精简了程序。可见,计算机编程与逻辑推理的紧密性。