开灯问题

菜鸟奋斗史 菜鸟奋斗史     2022-08-04     760

关键词:

问题描述:

     开灯问题,有n盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),以此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的编号。

算法实现:

 1 package com.ysw.test;
 2 
 3 import java.util.Arrays;
 4 import java.util.Scanner;
 5 
 6 /*
 7  * 问题描述: 开灯问题,有n盏灯,编号为1~n。
 8  * 第一个人把所有灯都打开,
 9  * 第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),
10  * 第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),
11  * 以此类推。一共有k个人,问最后有哪些灯开着?
12  * 输入n和k,输出开着的灯的编号。
13  * 
14  */
15 public class openAndCloseLantern {
16 
17     /**
18      * @param args
19      */
20     public static void main(String[] args) {
21         // 定义数组
22         int myArray[] = new int[1000];
23         // 函数:Arrays.fill(int myArray[],int value)将数组元素的值全部置为0
24         Arrays.fill(myArray, 0);
25         // 从键盘读取读取灯的数量和人的数目
26         Scanner reader = new Scanner(System.in);
27         // 灯的盏数
28         int lanternNum = reader.nextInt();
29         // 人的数量
30         int personNum = reader.nextInt();
31         for (int i = 1; i <= personNum; i++) {
32             for (int j = 1; j <= lanternNum; j++) {
33                 // 当j%i==0的时候说明灯的明或者亮的状态发生了改变
34                 if (j % i == 0) {
35                     // 改变灯的状态:用数字1代表亮,用数字0表示灭
36                     myArray[j] = (myArray[j] == 1) ? 0 : 1;
37                 }
38             }
39         }
40         // 输出元素值为1灯的标号,表示经过一系列操作之后依然亮着的灯的编号
41         for (int i = 1; i <= lanternNum; i++) {
42             if (myArray[i] != 0) {
43                 System.out.print(i + " ");
44             }
45         }
46         System.out.println();
47     }
48 
49 }

 

1151:零起点学算法58——开灯问题

1151:零起点学算法58——开灯问题TimeLimit:1Sec  MemoryLimit:64MB  64bitIOFormat:%lldSubmitted:3195  Accepted:1445[Submit][Status][WebBoard]Description 计算中心有8个机房,每个机房有n台电脑。每台电脑都有一 查看详情

c++开灯问题

#include<bits/stdc++.h>#include<algorithm>#include<math.h>usingnamespacestd;#definemaxn1010inta[maxn];intmain()intn,k,first=1;memset(a,0,sizeof(a));cin>>n>>k;for(inti=1;i 查看详情

开灯问题

 有n盏灯,编号为1-n,第一个人把所有灯打开,第二个人按下所有编号两倍的开关(这些灯被关掉),第三个人按下所有编号三倍的开关,以此类推,一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯的编号,k&... 查看详情

开灯问题(代码片段)

题目:有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关,第3个人按下所有编号为2倍数的开关(其中关掉的被打开,开着灯的将会被关掉),以此类推。一共K个人,最后有哪些灯是开着的?输... 查看详情

开灯问题(代码片段)

#include<stdio.h>#include<math.h>//算法竞赛的目标是编程对任意输入均得到正确的结果。//请先独立完成,如果有困难可以翻阅本书代码仓库中的答案,但一定要再次独立完成。//“抓住主要矛盾”——始终把学习、实验的焦点... 查看详情

开灯问题

有n盏灯,编号为1~n,第一个人把所有灯打开,第二个人按下所有编号为2的倍数开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),一次类推,一共有k个人,问最后哪些... 查看详情

反转开灯问题facetherightway(代码片段)

题目FarmerJohnhasarrangedhisN(1≤N≤5,000)cowsinarowandmanyofthemarefacingforward,likegoodcows.Someofthemarefacingbackward,though,andheneedsthemalltofaceforwardtomakehislifeperfect.Fortunately,FJrecentlyboughtanautomaticcowturningmachine.Sincehepurchasedthediscountmodel,itmustbeirrevocablypres... 查看详情

反转开灯问题facetherightway(代码片段)

题目FarmerJohnhasarrangedhisN(1≤N≤5,000)cowsinarowandmanyofthemarefacingforward,likegoodcows.Someofthemarefacingbackward,though,andheneedsthemalltofaceforwardtomakehislifeperfect.Fortunately,FJrecentlyboughtanautomaticcowturningmachine.Sincehepurchasedthediscountmodel,itmustbeirrevocablypres... 查看详情

开灯问题(代码片段)

问题描述:有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关,依此类推,一共k个人,问最后有哪些灯开着?  输入n,k,输出... 查看详情

开灯问题-----00004

描述有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k... 查看详情

nyoj77-开灯问题(倍数遍历)(代码片段)

77-开灯问题 内存限制:64MB时间限制:3000ms特判:No 通过数:13提交数:24难度:1题目描述:有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的... 查看详情

开灯问题(代码片段)

有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后... 查看详情

开灯问题--------《算法竞赛入门指导》p83

开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个... 查看详情

nyoj_77开灯问题

题目地址分析: 用一个数组来保存每盏灯的操作的次数。推断奇偶就可以推断灯的状态。最后的输出格式须要注意一下空格的位置,思路就是现输出一个。剩下来的输出在前面加一个空格。空格用_表示:1_3_5_... 查看详情

hdu2053switchgame(开灯问题,完全平方数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2053题目大意:灯开始是关着的,有n盏灯,i从1数到n每当灯的序号是i的倍数的时候就对灯进行一次操作(开->关,关->开),求最后第n盏灯是关着还是开着。解题思路:直接对第n盏... 查看详情

算法竞赛入门经典_3.1_数组_逆序输出_开灯问题

又是新的一天,继续更新.今天进入了新的章节,数组和字符串1.逆序输出问题:先来看代码吧#include<stdio.h>//逆序输出2017-8-16#definemaxn105inta[maxn];intmain(intargc,char*argv[]){//inta[maxn];intx,n=0;while(scanf("%d",&x)==1)a[n++]=x;for(in 查看详情

开灯和蛇形

...头绪,看了答案之后才慢慢能理解,嘛,一步一步来吧。开灯问题,有n盏灯,编号为1-n,第一个人把所有的灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3倍数的开关(其中关... 查看详情

保留指定位数小数开灯问题(代码片段)

...oat用fdouble用lfwhile(!(a==0&&b==0&&c==0));return0; 开灯问题:#include"stdafx.h"#include<stdio.h>#include<string.h>#definemaxn1010inta[maxn];intmain()intn,k,first=1;memset(a,0,sizeof(a));scanf("%d%d",&n,&k);for(inti=1;i<=k;i++)for(intj=1;j<=n;n++... 查看详情