用JAVA做:12个人排成一圈,从一号报数,凡是书到5的人就走出队伍,然后继续报数,试问最后一人出局的是谁
有懂的帮帮小弟我啊 谢谢大哥门啊
这是c语言里的经典练习题 到c语言的论坛看看吧
import java.awt.*;
import java.awt.event.*;
public class EvenetTest
{
public static void main(String args[])
{
Frame fr=new Frame("事件测试");
ButtonListener aa=new ButtonListener();
//生成事件处理(监听)对象
Button b1=new Button("测试");
Button b2=new Button("退出");
//生成两个按钮
b1.addActionListener(aa);
b2.addActionListener(aa);
//将事件源两个按钮注册给事件处理对象aa
fr.setLayout(new FlowLayout());
fr.add(b1);
fr.add(b2);
//将按钮加入Frame
fr.resize(200,200);
fr.show();
}
}
class ButtonListener implements ActionListener
//由于按钮源是按钮,实现监听者是ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand()=="测试");
{
System.out.println("按下按钮");
}
else
{
System.exit(0);
}
}
}
刚看到这个帖子,赶快写了个程序,不过因为系工作之余写的,程序有点烂~不过绝对可以用,呵呵,楼主表介意~
package com.gufengdebianyuan;
import java.util.ArrayList;
/**
* 12个人排成一圈,从一号报数,凡是书到5的人就走出队伍,然后继续报数,
* 试问最后一人出局的是谁?
* 约瑟夫环问题
*/
public class Queue {
private ArrayList list;
public Queue(){
list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
list.add("g");
list.add("h");
list.add("i");
list.add("j");
list.add("k");
list.add("l");
}
//链表数大于5
public void circle(ArrayList temp){
ArrayList temp2 = new ArrayList();
for(int i=0;i<4;i++){
temp2.add(temp.get(i));
}
for(int i=0;i<5;i++){
temp.remove(0);
}
unite(temp,temp2);
}
//链表数不大于5
public void circle2(ArrayList give){
ArrayList temp = new ArrayList();
temp = (ArrayList)give.clone();
while(true){
unite(temp,temp);
if(temp.size()>5) break;
}
for(int i=0;i<give.size();i++){
if(give.get(i).equals(temp.get(4)))
give.remove(i);
}
}
public ArrayList unite(ArrayList a,ArrayList b){
int w = a.size();
int y = b.size();
for(int i=0;i<b.size();i++){
a.add((String)b.get(i));
if(a.size() == (w+y)) break;
}
return a;
}
public static void main(String[] args){
Queue queue = new Queue();
while(true){
queue.circle(queue.list);
if(queue.list.size()<=5) break;
}
queue.list.remove(queue.list.size()-1);
while(true){
queue.circle2(queue.list);
if(queue.list.size()==1) break;
}
System.out.println("最后一个出局的是"+queue.list.get(0)+"同学~");
}
}