package org.bian;
/*
* 一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。
注:电灯数和学生数一致。
*/
public class Bulb {
public static void main(String[] args) {
int n=5;
Bulb bb= new Bulb();
int m=bb.lightBulb(n);
System.out.print(m);
}
public int lightBulb(int n){
int[] light =new int[n];
int count=0;
for(int i=0;i<n;i++){
light[i]=1;
}
if(n%2==0){
light[0]=0;
}else light[0]=1;
for(int i=1;i<n;i++){
for(int j=1;j<n;j++){
if(j%i==0){
if(light[j]==1){
light[j]=0;
}else if(light[j]==0){
light[j]=1;
}
}
}
}
for(int k=0;k<n;k++){
if(light[k]==1)
count++;
}
return count;
}
}
package org.bian;
/*使用数组实现约瑟夫环问题
*由m个人围成一个首尾相连的圈报数。
*从第一个人开始,从1开始报数,报到n的人出圈,
*剩下的人继续从1开始报数,直到所有的人都出圈为止。
*对于给定的m和n,求出所有人的出圈顺序.
*/
public class Josseph {
public static void main(String[] args) {
int m=30;
int n=9;
System.out.println(joSeph(m, n));
}
public static String joSeph(int m, int n) {
int[] a = new int[m];
for (int i = 0; i < a.length; i++) {
a[i] = i + 1;
}
int i = 0;
int j = 1;
int len=a.length;
String str="";
while(len>0){
if(a[i%m]>0){
if(j%n==0){
a[i%m]=-1;
str +=i%m+",";
j=1;
i++;
len--;
}else{
i++;
j++;
}
}else{
i++;
}
}
return str;
}
}
// Febonacci
public static void main(String[] args) {
int n=60;
Fibonacci fb= new Fibonacci();
System.out.println(fb.fbnc(n));
}
public int fbnc(int n){
int []f= new int[n];
f[0]=0;
f[1]=1;
for(int i=2;i<n;i++){
f[i]=f[i-1]+f[i-2];
}
return f[n-1]+f[n-2];
}
}