• 采用循环链表结构求解约瑟夫问题


    这是第一次java考试的试题,呜呼,因为没看过链表就不会做,现在回头看看,真不难。

    约瑟夫问题:有n个人,其编号分别为1,2,3,…,n。这n个人按顺序排成一个圈。现在给定s和d,从第s个人开始从1依次报数,数到d的人出列,然后又从下一个人开始又从1开始依次报数,数到d的人又出列,如此循环,直到最后所有人出列为止。要求定义一个节点类,采用循环链表结构求解约瑟夫问题。

    以下java版的答案

    import java.util.Scanner;
    public class LinkNode {              //单向链表的节点类
        public int data;                 //存放节点值
        public LinkNode next;            //存放节点值的引用
        
        public LinkNode(int k){         //构造方法 ,值为k的节点
            data = k;
            next= null;
        }
    }
     class Josephus{
        public static void printJosephus(int n,int s,int d){        
            int i=1;                    //创建长为n的循环列表
            LinkNode q,tail;
             
            LinkNode head = new LinkNode(i);
            head.next = head ;
            tail = head;             //第一个节点,尾巴和头在一起
            
            while(i<n){
                i++;
                q = new LinkNode(i);    //增加一个新节点
                q.next = head ;        //节点的引用指向头
                tail.next = q;            //最后一个元素的引用指向了q
                tail = q;              //那么最后一个元素就是q
            }
    
            int j= 0;               //从s开始报数,依次输出出列人的编号
            LinkNode p = head;      //计数起点
            while(j<s-1){
                j++;
                p = p.next;
            }
            while(p.next != p){
                j = 1;
                while(j<d-1)   //计数的起始点
                {
                    j++;
                    p = p.next;
                }        
                System.out.print(p.next.data + " ");  // 输出出列的节点号
                p.next = p.next.next;
                p = p.next;                                //不断指向下一个节点            
            }
            System.out.print(p.data);
        }
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int n = input.nextInt();
            int a = input.nextInt();
            int b = input.nextInt();
            Josephus.printJosephus(n, a, b);
        }
    }
  • 相关阅读:
    conda安装opencv opencv-contrib-python opencv-python
    在Conda下安装jupyter notebook
    安装eric环境小记
    https://paperswithcode.com/task/object-detection
    全网最全开源工业缺陷数据集汇总(已更新24个)
    caffe windows训练测试自己的图片
    caffe训练自己的图片(分类)
    caffe学习系列:训练自己的图片集(超详细教程)
    conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
    回旋曲线的计算
  • 原文地址:https://www.cnblogs.com/LZYY/p/3276484.html
Copyright © 2020-2023  润新知