|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目如下:
提高挑战难度:编号为1~N的N个人按顺时针方向
围坐一圈,每人持有一个密码(正整数,可以自由
输入),
开始人选一个正整数作为报数上限值M,
从第一个人按顺时针方向自1开始顺序报数,报道M
时停止报数。报M的人出列,将他的密码作为新的M
值,从他顺时针方向上的下一个人开始从1报数,一
如此下去,直至所有人全部出列为止。(题目出处:(小甲鱼)数据结构和算法 18约瑟夫环)
因为我最近在学java 所以就用Java照这个思路做了一下代码如下- //作者:铁头娃鸭
- //日期:2020.6。11
- //作用:进阶约瑟夫环(每个人都拿着一个密码数字,数密码上线次
- import java.io.*;
- import java.util.*;
- public class work7{
- public static void main(String args[]){
- Cyc_link cyclink=new Cyc_link();
- cyclink.set_len();
- cyclink.create_link();
- cyclink.set_k();
- cyclink.play();
- }
- }
- class Child{
- int no;//编号
- int key;//手上持有的密码
- Child next=null;
- public Child (int no){
- this.no=no;
- }
- }
- class Cyc_link{
- Scanner sr=new Scanner(System.in);
- // 先定义一个指向链表第一个小孩的的引用(头结点)
- Child first_child=null;
- Child temp=null;//跑龙套的temp
- int len=0;//表示共有几个小孩
- int k=0;//从第几个小孩开始数
- int key=0;
- public void set_len(){
- System.out.println("参加游戏的人数");
- this.len=sr.nextInt();
- }
- public void set_k(){
- System.out.println("从第几个人开始数?");
- this.k=sr.nextInt();
- }
- public void create_link(){
- System.out.println("开始围成一个圈,并赋予每人人手上一位密码,");
- for(int i=1; i<=len;i++){
- if(i==1){ //创建第一个小孩
- Child ch=new Child(i);
- this.first_child=ch;
- this.temp=ch;
- System.out.print("第"+i+"人的密码:");
- ch.key=sr.nextInt();
- }
- else {
- if (i==len){//最后一个小孩
- Child ch=new Child(i);
- System.out.print("第"+i+"人的密码:");
- ch.key=sr.nextInt();
- temp.next=ch;
- temp=ch;
- temp.next=this.first_child;
-
- }
- else {//其余小孩
- Child ch=new Child(i);
- System.out.print("第"+i+"人的密码:");
- ch.key=sr.nextInt();
- temp.next=ch;
- temp=ch;
- }
- }
- }
- }
- public void play(){//开始游戏
- //首先找到第个数数的那个人
- for (int i=1;i<k;i++){
- temp=temp.next;
- }
- this.key=temp.next.key;
- //再开始数数并退圈
- while(temp!=temp.next){
- for (int i=1;i<=this.key;i++){
- temp=temp.next;
- }
- this.key=temp.next.key;
- System.out.print("推出圈的人:"+temp.next.no+" ") ;
- temp.next=temp.next.next;
-
- }
- System.out.println("最后存活的人 :"+temp.no);
- }
- }
复制代码
测试结果如下
参加游戏的人数
10
开始围成一个圈,并赋予每人人手上一位密码,
第1人的密码:2
第2人的密码:3
第3人的密码:4
第4人的密码:7
第5人的密码:6
第6人的密码:11
第7人的密码:22
第8人的密码:11
第9人的密码:1
第10人的密码:11
从第几个人开始数?
2
推出圈的人:5 推出圈的人:2 推出圈的人:7 推出圈的人:9 推出圈的人:1 推出圈的人:6 推出圈的人:4 推出圈的人:10 推出圈的人:8 最后存活的人 :3
|
|