有 1 到3000的数(1 2 3 4 .....)
间隔1取出数据,把新得到的列再间隔1取出,依次循环下去,问最后得出的数是多少>?
如第一次循环为(2 4 6 8 ....)
第2次为(4 8...)
最好写出代码.

解决方案 »

  1.   

    测试一下,呵呵。[BanUBB]
    public class LastNumber {
        public static void main(String[] args) {
            int n = 3000;
            System.out.println(Integer.highestOneBit(n));
        }
    }[/BanUBB]
      

  2.   

    1. 方法一:
       数学方法,正如二楼的朋友所说,最后剩下的就是比3000小的那个最大的2的多少次幂,即计算2的n次方小于3000这个方程
    2. 方法二:
       其实跟第一种方法差不多,就是把这个问题程序化,4楼的朋友说了
    3. 方法三:
       也是最笨、最原始的方法,就是从每次去掉的那些数一轮一轮的考虑
       
                public static void main(String[] argv) { /**
     * 有 1 到3000的数(1 2 3 4 .....)间隔1取出数据,把新得到的列再间隔1取出,依次循环下去,问最后得出的数是多少?
     * 如第一次循环为(2 4 6 8 ....) 第2次为(4 8...) 最好写出代码.
     */
    int[] num = new int[3000];
    // 赋值
    for (int i = 0; i < 3000; i++) {
    num[i] = i + 1;
    }
    for (int i = 0; i < 11; i++) {
    for (int j = (int) (Math.pow(2, (double) i) - 1); j < 3000; j += (int) (Math.pow(2,
    (double) (i + 1)))) {
    num[j] = 0;
    }
    }
    for (int i = 0; i < 3000; i++) {
    if (num[i] != 0)
    System.out.println(num[i]);
    }
        }