数组小练习

 //500个人手拉手围一圈,数3退1,直到还剩一个人,找出最后一个人的位置

//500个人手拉手围一圈,数3退1,直到还剩一个人,找出最后一个人的位置

//初始化数组

public class Count3Quit2 {
	public static void main(String[] args) {
		boolean [] arr = new boolean[500];
		for(int i = 0;i<arr.length;i++) {
			arr[i] = true;
		}
		
		int CountNum = 0;
		int index = 0;
		int leftCount = arr.length;
		
		while(leftCount > 1) {
			if(arr[index]==true) {
				CountNum++;
				if(CountNum==3) {
					CountNum = 0;
					arr[index] = false;
					leftCount--;
					
				}
				
			}
			index++;
			
			if(index == arr.length) {
				index = 0;
			}
		}
		for(int i = 0;i<arr.length;i++) {
			if(arr[i] == true ) {
				System.out.print(i);
			}
			
		}
		

		
	}
}

 面向对象写法

//500个人手拉手围一圈,数3退1,直到还剩一个人,找出最后一个人的位置
public class Count3Quit3 {
	public static void main(String[] args) {
		KidCircle kc = new KidCircle(500);
		int countNum = 0;
		Kid k = kc.first;
		while(kc.count>1) {
			countNum++;
			if(countNum == 3) {
				countNum = 0;
				kc.delete(k);
			}
			k = k.right;
		}
		
		System.out.println(kc.first.id);
			
			
		
		
		
		
		
	}
}

class Kid {
	int id;
	Kid left;
	Kid right;
}

class KidCircle {
	int count =0;
	Kid first,last;
	
	
	KidCircle(int n) {
		for(int i = 0; i<n;i++) {
			add(); 
		}
	}
	
	void add() {
		Kid k = new Kid();
		k.id = count;
		if(count<=0) {
			first = k;
			last = k;
			k.left = k;
			k.right = k;
		} else {
			last.right = k;
			k.left = last;
			k.right = first;
			first.left = k;
			last = k;
		}
		count++;
	}
	
	void delete(Kid k) {
		if(count <= 0) {
			return;
		}	else if (count == 1) {
			first = last = null;
		}	else {
			k.left.right = k.right;
			k.right.left = k.left;
			
			if(k == first) {
				first = k.right;
				
			}	else if(k == last){
				last = k.left;
			}
		}
		count --;
	}
	
}
原文地址:https://www.cnblogs.com/lsswudi/p/11308987.html