问题:
有N个灯放一排,从1至N依次顺序编号。有N个人站一排,也从1至N一次编号。1号将灯全开,二号将2的倍数拉一次,关掉。。。。。最后还剩几盏灯亮着
public static void ladengwetnt(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
String inStr = br.readLine();
int n = Integer.parseInt(inStr);
if(n < 1 || n> 65535){
return;
}
int[] arr = new int[n];
for(int i = 0;i < n;i++){
arr[i] = 0;
}
for(int k = 1;k<=n;k++){
for(int i = 1;i <= n;i++){
if(i*k <=n ){
arr[i*k - 1] = (arr[i*k -1]+1)%2;
}
else{
break;
}
}
}
int count = 0;
for(int i = 0;i < n;i++){
if(arr[i] == 1){
count++;
}
}
System.out.print(count);
} catch (Exception e) {
// TODO: handle exception
//程序中只可能出现非法字符转数字异常 直接退出
return;
}
}
for(int k = 1;k<=n;k++){
for(int i = 1;i <= n;i++){
arr[i%k] = (arr[i%k]+1)%2;
}
这样的话内存循环要跑n次才结束,需要优化内层循环,因此需要进一步优化。优化结果在最上面。基本是瞬间出结果。不优化的话 OJ平台的审核结果是运行时超时。