删除奇位数
这道题比较简单,传统作法是借助计算机强大的运算速度支持,照题设模拟,即设立一个数组,装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,增长速度快,对大数也不成问题,另外最重要的是它把在众多数中去删选数转化成去直接找数,大大减少了无用功,也精简了程序。可见,计算机编程与逻辑推理的紧密性。