首页 新闻 会员 周边

java题目求解感谢大家

0
[已解决问题] 解决于 2024-03-02 11:38

qqqqqqqqqqqqqqqqqqqqqq
有n盏灯,编号1~n(0<n<100)。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依次类推。输入灯数和人数,输出开着的灯的编号。
比如输入:10 2输出最后亮灯的编号:1,3,5,7,9 注意:使用循环语句实现。

浮光跃迁的主页 浮光跃迁 | 初学一级 | 园豆:91
提问于:2024-02-23 17:22
< >
分享
最佳答案
0

以下是用Java实现的代码:

java
Copy code
import java.util.ArrayList;
import java.util.Scanner;

public class ToggleLights {

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入灯数和人数,以空格分隔:");
    int n = scanner.nextInt();
    int people = scanner.nextInt();
    String result = toggleLights(n, people);
    System.out.println("最后亮灯的编号:" + result);
    scanner.close();
}

public static String toggleLights(int n, int people) {
    boolean[] lights = new boolean[n]; // 初始化所有灯都是关闭的

    for (int person = 1; person <= people; person++) { // 依次表示每个人
        for (int lightIndex = person - 1; lightIndex < n; lightIndex += person) { // 对应当前人按下的开关
            lights[lightIndex] = !lights[lightIndex]; // 切换灯的状态
        }
    }

    ArrayList<Integer> result = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        if (lights[i]) {
            result.add(i + 1); // 收集最后亮着的灯的编号
        }
    }

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < result.size(); i++) {
        sb.append(result.get(i));
        if (i < result.size() - 1) {
            sb.append(", ");
        }
    }
    return sb.toString();
}

}
您可以将此代码保存到ToggleLights.java文件中,然后编译并运行。程序将提示您输入灯数和人数,然后输出最后亮着的灯的编号。

奖励园豆:5
Technologyforgood | 大侠五级 |园豆:5992 | 2024-02-25 13:20

太厉害了,感谢

浮光跃迁 | 园豆:91 (初学一级) | 2024-03-02 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册