1. 程式人生 > >南陽OJ 題目77:開燈問題

南陽OJ 題目77:開燈問題

題目描述:題目連結

開燈問題

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:1
描述

有n盞燈,編號為1~n,第1個人把所有燈開啟,第2個人按下所有編號為2 的倍數的開關(這些燈將被關掉),第3 個人按下所有編號為3的倍數的開關(其中關掉的燈將被開啟,開著的燈將被關閉),依此類推。一共有k個人,問最後有哪些燈開著?輸入:n和k,輸出開著的燈編號。k≤n≤1000

輸入
輸入一組資料:n和k
輸出
輸出開著的燈編號
樣例輸入
7 3
樣例輸出
1 5 6 7

程式碼求解:

package 語言入門;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Num_77 {

	public static void main(String[] args) throws IOException 
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer(in.readLine());
		
		int ligthNumber= getInt(st.nextToken());
		int humanNumber=getInt(st.nextToken());
		int[] light=new int[ligthNumber+1];
		
		for(int i=1;i<=humanNumber;i++)
		{
			ChangeLight(light,i,ligthNumber);
		}
		
		for(int i=1;i<=ligthNumber;i++)
			if(light[i]==1)
				System.out.print(i+" ");

		
	}

	private static void ChangeLight(int[] light, int n, int ligthNumber)
	{
		for(int i=1;i<=ligthNumber;i++)
		{
			if(i%n==0)
				light[i]=1-light[i];
		}
		
	}

	private static int getInt(String readLine)
	{
		return Integer.parseInt(readLine);
	}

}