1到100号的灯开关问题

有1到100号的灯,一开始全部点亮。每盏灯都有独立的开关,且开关只有“开”和“关”两种状态。
第一次把所有1的倍数灯的开关按一次,第二次把所有2的倍数灯的开关按一下,一直到第一百次把所有100的倍数灯的开关按一下。
问,此时还有多少灯灭着?

一、Java编程解决

package test;

import java.util.ArrayList;
import java.util.List;

public class lamp1_100 {
	public static void main(String[] args){
		int count=0;
		List<Integer> dd = new ArrayList<Integer>();
//	默认所有的灯开着
		for(int i=0;i<100;i++){
			dd.add(1);
		}
//		操作所有的灯
		for(int k=1;k<=100;k++){
			//对k的倍数的灯进行操作如果是关设置成开 如果是开设置成关
			for(int t=1;t<=100/k;t++){
				if(dd.get((k*t)-1)==0){
					dd.set((k*t)-1,1);
				}else{
					dd.set((k*t)-1,0);
				}
			}
		}
//	计算灭灯的灯的个数
		for(int i=0;i<100;i++){
			if(dd.get(i)==0){
				count++;
				System.out.println("剩余灭的灯的索引:"+ i);
			}
		}
		System.out.println("剩余灭的灯的个数:"+count);
	}

}

二、python字典解决

灯泡有两种状态:开和关,用 -1代表关,用1代表开。每次操作后,状态上乘以-1。
on ---> 1     off ---> -1

dic = {k:1 for k in range(1,101)}

def lanm(n):
    for i in range(1,n+1):

        for x in dic:
            if x%i == 0:
                dic[x] = int(dic[x])*-1

    return dic


num = len({k: v for k,v in lanm(100).items() if v == 1})
print(f"There are {num} lights on.")

#There are 10 lights on.

三、python列表

lamp = []
#默认100盏灯都是开的
for i in range(100):
    lamp.append(1)
#循环100个灯
for k in range(1,101):
    i = 0
#对k的倍数的灯进行开关操作
    while i <= 100/k:
        if lamp[(i*k)-1] == 0:
            lamp[(i * k) - 1] = 1
        else:
            lamp[(i*k)-1]=0
        i += 1
#count = len([i for i in lamp if i==0])
count = 0
for i in range(0,100):
    if lamp[i] == 0:
        count +=1
        print(f"灭灯的位置{i+1}")
print(f"灭灯的数量{count}")

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值