问题:
大厅里有64盏灯,每盏灯都编了号码,分别为1-64。每盏灯都由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。
第一次,将所有的灯点亮。
第二次,将所有2的倍数的开关按一下。
第三次,将所有3的倍数的开关按一下。
以此类推。第N次,将所有N的倍数的开关按一下。
问第N次(N小于等于64)按完以后,大厅里还有几盏灯是亮的。
提示:用一个long来表示64盏灯,long有64位,每个位上只能取值0和1,可以选择取1表示灯亮,取0表示灯灭;
大家在看答案之前,可以自行思考一下 :)
参考实现代码:
public static void main(String[] args) {
int max = 4;
long light = 0;
for(int n=1; n <= max; n++){
for(int i=1; i<=64 ; i++){
//i代表了灯/开关的编号,需要将n的倍数所在的位取反
//比如:n=1,那么,需要将1,2,3,4,5...这些位取反
//n=2,需再将2,4,6,8,10...这些位取反
//n=3,需再将3,6,9,12,15...这些位取反
if(i % n == 0){
//将i那一位取反
//如何将某一位取反呢?没有直接将某一位取反的现成的操作,
//那么,我们可以判断此位的值是1还是0,然后据此,将此位改成0或1
//接下来的问题就是如何判断某位的值?如何将此为改成0或1?
long temp = 1;
temp = temp << (i - 1);
if((temp & light) == 0){ //表示i这一位为0
//需将此位改成1
light = light | temp;
}else{ //表示i这一位为1
//需将此位改成0
temp = ~temp;
light = light & temp;
}
}
}
}
//现在的light值,在某一位上如果取值为0表示灯灭,某一位上如果取值为1表示灯亮
//下面输出结果
int total = 0; //总共亮灯的数量
for(int i=0; i<64; i++){
long temp = 1;
temp = temp << i;
temp = temp & light;
if(temp == 0){ //灯灭
System.out.println("【"+(i+1)+"】号灯:灭");
}else{ //灯亮
System.out.println("【"+(i+1)+"】号灯:亮");
total = total + 1;
}
}
System.out.println("在经过【"+max+"】次之后,总共有【"+total+"】盏灯是亮的!");
}
分享到:
相关推荐
Java 语言提供了多种运算符,包括算术运算符、赋值运算符、比较运算符、逻辑运算符和位运算符等。 5. 控制结构 Java 语言提供了多种控制结构,包括顺序结构、选择结构和循环结构。选择结构包括 if 语句和 switch ...
在“VC400_test_jna”这个文件中,可能包含了一个测试项目或者示例代码,它演示了如何使用JNA来调用大华SDK的DLL进行视频播放操作。具体实现细节可能包括设置解码器、创建播放窗口、控制播放状态、处理视频数据流等...
1. **基础语法**: 包含的示例可能涵盖Java的基础语法,如变量声明、数据类型(整型、浮点型、字符型、布尔型等)、运算符(算术、比较、逻辑、位运算符)以及流程控制语句(if-else、switch、for、while循环)。...
"java小例子"可能是指一系列的简单程序,用于演示Java语言的关键特性或常见编程概念。在学习Java时,通过编写和分析小例子是理解语言语法和逻辑的有效方式。 在Java编程中,例子通常会涵盖以下几个方面: 1. **...
《Java2实用教程》是Java编程领域的一本经典教材,由耿祥义和张跃平两位专家编著,已经更新到了第五版。这本书深入浅出地介绍了Java编程语言的基础知识和高级特性,旨在帮助读者掌握Java编程技术,提升实际开发能力...
4. **集合框架**:ArrayList、LinkedList、HashSet、HashMap等是Java集合框架的一部分,例子会演示它们的使用、遍历和操作。 5. **输入输出流**:FileInputStream、FileOutputStream、BufferedReader、PrintWriter...
1. **基础语法**:Java的基础语法包括变量声明、数据类型(如整型、浮点型、字符型、布尔型以及引用类型)以及运算符(算术、关系、逻辑和位运算符)。通过小例子,你可以了解到如何声明、初始化和使用变量,以及...
【JAVA例子100】这个资源对于...通过实际动手操作这些例子,你可以更好地理解JAVA的工作原理,提升编程能力。在codefans.net这个压缩包中,你应该能找到对应的代码示例,逐个学习并亲手实践,这是学习编程的最佳途径。
每个例子可能演示如何声明、初始化和使用这些变量。 2. **运算符和表达式**:包括算术、比较、逻辑和位运算符,以及它们在实际编程中的应用。 3. **流程控制**:涉及条件语句(if-else、switch-case)和循环结构...
1. **基础语法**:Java的基础语法包括变量声明、数据类型(如整型、浮点型、字符型、布尔型等)、运算符(算术、比较、逻辑、位操作等)、流程控制(if语句、switch语句、for循环、while循环等)。 2. **类与对象**...
1. **基础语法**:Java的基础语法包括变量声明、数据类型(如整型、浮点型、字符型、布尔型)、运算符(算术、关系、逻辑、位操作等)、流程控制(if语句、switch语句、for循环、while循环)以及方法定义等。...
JavaService是一个工具包,它允许Java应用程序在Windows操作系统下作为服务来运行,类似于其他系统中的守护进程。这个工具使得开发者可以轻松地将Java程序转换为Windows服务,使其能够在系统启动时自动启动,并在...
在这个例子中,`jnotifytest`可能包含了一个简单的示例应用,用于演示如何使用`jnotify`。 使用`jnotify`的基本步骤如下: 1. **导入库**:在Java代码中引入`net.contentobjects.jnotify`包。 2. **初始化`jnotify...
这份"java21个自学例子必备资料,附程序源代码"的压缩包为初学者提供了一个绝佳的学习路径,帮助他们从基础到进阶掌握Java编程。 首先,让我们逐一解析这些例子,它们可能是涵盖不同主题和概念的实战项目: 1. **...
Java棋盘覆盖实现演示...总的来说,这个棋盘覆盖的Java演示程序是理解和学习算法设计、递归、分治策略以及问题解决技巧的好例子。它可以帮助开发者提高编程能力,尤其是面对复杂问题时如何进行有效的逻辑分解和抽象。
例子可能包括内存管理技巧、避免不必要的对象创建、使用位操作而非数学运算等优化手段。 通过这些Java小例子,学习者可以逐步理解并掌握J2ME开发的基本概念和实践技巧,为构建实际的移动应用打下坚实的基础。每个...
下面展示了一个示例代码,演示了如何使用`BigDecimal`来保留两位小数并进行四舍五入操作: ```java double f = 111231.5585; BigDecimal b = new BigDecimal(Double.toString(f)); double f1 = b.setScale(2, ...
在`javaTest`文件中,可能包含了演示这些加密算法的Java代码。例如,你可以创建一个类,导入`javax.crypto.Cipher`和`java.security.KeyPairGenerator`等类,然后编写方法分别实现AES和RSA的加密解密操作。在AES中,...
14. **枚举(Enum)**:Java中的枚举是一种特殊的类,用于定义常量,例子将演示其用法。 15. **设计模式**:如单例、工厂、观察者、装饰器等经典设计模式,例子将阐述如何在Java中实现这些模式。 这些例子是学习和...