有 1 到3000的数(1 2 3 4 .....)
间隔1取出数据,把新得到的列再间隔1取出,依次循环下去,问最后得出的数是多少>?
如第一次循环为(2 4 6 8 ....)
第2次为(4 8...)
最好写出代码.
间隔1取出数据,把新得到的列再间隔1取出,依次循环下去,问最后得出的数是多少>?
如第一次循环为(2 4 6 8 ....)
第2次为(4 8...)
最好写出代码.
解决方案 »
- 数组出现空指针异常,实在是找不出为啥为null来啊,求教
- 数组排序问题(来着有分)
- 请教有关qq邀请多人聊天的技术
- 如何成为高素质的JAVA程序员
- 请问Microsoft SDK for Java 4.0在那里有的下载阿?
- jni使用c++写的一个dll中的函数时,函数入口的结构指针应该怎么处理?
- 一个方法返回值是boolean
- 请教:老师布置了一个JAVA的设计题目,请问有什么好的题目啊(至少包括线程)我是JAVA初学者.
- jdbc在applet中为什么出错?sun.applet.AppletSecurity是什么意思?答者给分!
- java里面有FileAppender形式的log4j.xml吗?
- 能不能用JAVA代码实现登陆框自动填写并登陆?
- 文件描述器是什么?
public class LastNumber {
public static void main(String[] args) {
int n = 3000;
System.out.println(Integer.highestOneBit(n));
}
}[/BanUBB]
数学方法,正如二楼的朋友所说,最后剩下的就是比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]);
}
}