package game;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Game7
{
public static void main(String[] args)
{
int a,b;
Scanner input = new Scanner(System.in);
List<Integer> open = new ArrayList<>();
System.out.println("请输入一共有多少灯:");
a=input.nextInt();
System.out.println("请输入一共有多少人");
b=input.nextInt();
// 一共有多少灯集合中就放入多少占位符,其中1表示灯开-1表示灯关,灯一开始全部都是打开着的
for(int i=0;i<a;i++)
{
open.add(1);
}
//如果只有一个人话
if(b==1)
{
System.out.println("亮着的灯");
for(int i=0;i<a;i++)
{
System.out.print(i+1+"\t");
}
System.out.println();
}
else
{
int k=2;//从第二个人开始,第一个人已经把灯全打开了
while (k<=b)
{
for(int i=0;i<a;i++)//集合的长度和灯的数量是相等的,所以一号灯就是集合下标加一个1
{
if((i+1)%k==0)//如果某号灯和某号人成倍数关系
{
int item=open.get(i);
item=item*-1;//将数据从集合中拿出乘以个-1 因为1*-1=-1 -1*-1=1 这样就实现了灯的开和关的表现
open.set(i,item);//最后将数据重新存进集合
}
}
k++;//下位人
}
System.out.println("亮着的灯");
// 只要最后集合中的数据不为-1就说明灯是打开着的
for(int i=0;i<open.size();i++)
{
if(open.get(i)!=-1)
{
System.out.print(i+1+"\t");
}
}
}
}
}
有 n 盏灯,编号 1~n(0<n<100)。第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的倍数的开关(其中关掉 的灯将被
最新推荐文章于 2024-03-28 17:47:28 发布