JAVA学习日报 8.5

今天来迫害一下程序设计技能实训的“约瑟夫退圈”

这东西当时我就没整明白,主要是箭头太多不知道怎么用了,但到了JAVA这些都可以用点来完成。

代码如下:

package test2;

import java.util.Scanner;

class node
{
    public int id;
    public node next;
    public node pro;
}

final class Class13 {
    static void setlist(node headnode,int n)
    {
        node position;
        position=headnode;
        for(int i=2;i<=n;i++)
        {
            node temp=new node();
            temp.id=i;
            position.next=temp;
            temp.pro=position;
            position=temp;
        }
        position.next=headnode; 
        headnode.pro=position;
    }
    static void cinlist(node headnode,int m,int n,int k) 
    {
        int id=1;
        node position=headnode;
        for(int i=1;i<m;i++) 
        {position=position.next;}
        int sum=0;
        for(;;)
        {
            if(id==k)
            {
                System.out.print(position.id+" ");
                position.pro.next=position.next;
                position.next.pro=position.pro;
                sum++ ;
                if(sum==n-1)
                {
                    position=position.next;
                    break;
                }
                id=0;
            }
            position=position.next;
            id++;
        }
        System.out.print(position.id+" ");
    }
    public static void main(String[] args) {
        int n,startid,m;
        Scanner input=new Scanner(System.in);
        System.out.print("输入排圈人数
");
        n=input.nextInt();
        System.out.print("输入起始者的ID
");
        startid=input.nextInt();
        System.out.print("请输入每次报数的值
");
        m=input.nextInt();
        node head;
        head = new node();
        head.id=1;
        setlist(head,n);
        cinlist(head,startid,n,m);
        input.close();
    }
}

运行结果如下:

原文地址:https://www.cnblogs.com/Sakuraba/p/13454651.html