首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

用数组和面向对象诀别解决数三退一智力游戏

2012-09-23 
用数组和面向对象分别解决数三退一智力游戏“数三退一”介绍n个人编号0~n-1,手拉手围成一个圈,按照一定的方

用数组和面向对象分别解决数三退一智力游戏
        “数三退一”介绍

             n个人编号0~n-1,手拉手围成一个圈,按照一定的方向从0号开始数,每数到3的人退出,从下一个人继续数,直到剩下最后一个人。
求这个人的编号。

          用数组通过面向过程实现
public class Count3Quit{public static void main(String[] args){Boolean[] people=new Boolean[500];for(int i=0;i<people.length;i++){people[i]=true;}int leftNum=500;int countNum=0;int index=0;while(leftNum>1){if(people[index]==true){countNum++;}if(countNum==3){leftNum--;people[index]=false;countNum=0;}index++;if(index==people.length){index=0;}}for(int i=0;i<people.length;i++){if(people[i]==true){System.out.println(i);}}}}
         用面向对象的思想解决
public class OOCount3Quit{public static void main(String[] args){kidCircle c=new kidCircle(500);int flag=0;kid k=c.first;//拿到第一个小孩while(c.count>1){flag++;if(flag==3){flag=0;c.delete(k);}k=k.right;}//输出System.out.println(c.first.id);}}//定义一个小孩类class kid{int id;//序号kid left;//左边的小孩kid right;//右边的小孩kid(int id){this.id=id;}}//定义一个圈类class kidCircle{int count=0;//圈里面还有多少个小孩kid first;//第一个小孩kid last;//最后一个小孩//构造方法kidCircle(int n){for(int i=0;i<n;i++){add();}}//定义一个方法,用来添加小孩void add(){kid k=new kid(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{k.left.right=k.right;k.right.left=k.left;if(k==first)     //如果删除的是第一个小孩{/*下面这句话是多余的,因为last的右边一直是first*///last.right=k.right;first=k.right;}else if(k==last)//如果删除的是最后一个小孩{last=k.left;}}count--;}}


 

             还有一个思路就是通过数组来模拟链表实现。。。

热点排行