当前位置:网站首页>1到100号的灯开关问题

1到100号的灯开关问题

2022-04-23 14:04:00 学海无涯乐做舟

有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}")

 

版权声明
本文为[学海无涯乐做舟]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_41918841/article/details/107406038