| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1482 人关注过本帖
标题:java面试题
只看楼主 加入收藏
qsrock
Rank: 1
等 级:新手上路
帖 子:255
专家分:0
注 册:2005-12-29
收藏
得分:0 

public class Count7Quit
{
public static void main(String[] args)
{
boolean[] b=new boolean[100];//表示有100个人,true表示剩余的人,false表示退出的人
for(int i=0;i<b.length;i++){
b[i]=true;
}

int leftCount=b.length;//剩余的人数,一开始没人退出当然为100啦
int index=0;//用来看数到哪个位置
int countNum=0;//用来数人,都是数1,2,3,4,5,6,7

while(leftCount>1){//循环到退出人数剩下一个人
if(b[index]==true){
countNum++;
if(countNum==7){//如果数到第7个人
countNum=0;
b[index]=false;
leftCount--;//那剩余的人数就减1
}
}

index++;

if(index==b.length){//如果数到尽头了,又重新开始数(注意:这个不影响countNum的)
index=0;
}
}

for(int i=0;i<b.length;i++){
if(b[i]==true)
System.out.println("最后剩下的人是 :"+(i+1));//因为数组下标是从0开始,所以i要加1
}
}
}
刚学来的程序!~
经典算法啊!~
符合楼主要求了,结果为50,运行下就出来了!~

2007-08-12 15:57
dcqouming
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-8-28
收藏
得分:0 
我用链表做的,跟上面差不多,贴出来做个参考吧
/*
* 小孩的类
*/
class Child {
public Child(int i){
pos=i;
}
//保存右边是谁
public Child rightChild=null;
//保存小孩的编号
public int pos;
}
/*
* 单向循环链表
*/
class ChildList{
//保存起始头,前指针,当前指针
Child first,pre,current;
//构造i个元素的循环链表
ChildList(int i){
//第一个小孩
first=current=new Child(1);
for(int j=2;j<=i;j++){
Child newChild=new Child(j);
System.out.println(newChild.pos);
current.rightChild=newChild;
current=newChild;
}
//最后一个小孩的右边就是第一个小孩
current.rightChild=first;
//保存前指针
pre=current;
current=first;

}
//搜索最后的小孩,n为去除间隔值,本例为7
public void seachLastChild(int n){
int moveTimes=0; //报数经过的人数
while(current.rightChild!=current){
pre=current;
current=current.rightChild;
moveTimes++;
//当经过n-1次时,从链表中去除第n个小孩
if(moveTimes==n-1){
System.out.println("出列的小孩为 "+current.pos);
pre.rightChild=current.rightChild;
current=current.rightChild;
moveTimes=0;
}
}
first=current;
}
public void displayLastChild(){
System.out.println("最后的小孩是第 "+first.pos+" 小孩");
}
}
public class TChild{
public static void main(String []args){
ChildList clist=new ChildList(100);
clist.seachLastChild(7);
clist.displayLastChild();
}
}

可以改变长度和间隔数来计算最后的小孩
2007-08-28 22:32
jie_zhou
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-8-29
收藏
得分:0 

第一次回贴 up


import java.util.LinkedList;

class UNumber {
private int number;
public UNumber(int i) {
this.number=i;
}
public String toString() {
return String.valueOf(number);
}
public boolean equals(Object obj) {
return this.number==((UNumber)obj).number;
}
public int hashCode() {
return 37*number;
}
}

public class ReportNumber{
private LinkedList<UNumber> list=new LinkedList<UNumber>();
public ReportNumber(int numbers) {
if(numbers<=0) throw new RuntimeException();
for(int i=1;i<=numbers;i++) {
list.add(new UNumber(i));
}
}

// 参与者(position) 跟 整体(pos) 保持同步
public void calculate(int position) {
if(position<=0) return;
for(int i=0,pos=0;!list.isEmpty();i++,pos++) {
if(pos==list.size()) pos=0;
if(i==position-1) {
System.out.println((UNumber)(list.remove(pos)));
i=-1;
pos--;
}
}
}
public static void main(String[] args) {
new ReportNumber(100).calculate(7);
}
}

[此贴子已经被作者于2007-8-29 21:15:06编辑过]

2007-08-29 21:14
jerry1015
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-1-4
收藏
得分:0 

我想问一下4楼那个算法里面,if(i>N-1) i=0;
i怎么会有可能大于N-1呢?N等于10是固定不变的.10个小孩最多循环9遍就停止了啊,i不可能大于N-1啊.

2007-08-30 15:51
快速回复:java面试题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013958 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved