zoukankan      html  css  js  c++  java
  • 华为面试题——约瑟夫问题的C++简单实现(循环链表)

    /*
        author:jiangxin
        Blog:http://blog.csdn.net/jiangxinnju
        Function:method of Josephus question
    */
    #include <iostream>

    using namespace std;

    struct node
    {
        int seq;
        node *next;
    };
    typedef struct node NODE;

    void test_Josephus()
    {
        /*假设共有n人,从第s个人开始数数,每数到m该人出列,后面的人重新开始数,知道全部人出列*/
        int n,s,m;
        NODE *head,*last,*current,*prev;
        cout << "Input the n,s,m(separate with space):";
        cin >> n >> s >> m;

        for(int i=1;i<=n;i++) //建立循环链表
        {
            current = new NODE;
            current->seq = i;
            current->next = head;
            if(i == 1)
            {
                head = current;
                last = current;
            }
            else
            {
                last->next = current;
                last = last->next;
            }
        }
        current = head; //遍历循环链表,输出序列
        do
        {
            cout << current->seq << " ";
            current = current->next;
        }while(current!=head);

        current = head; //将current置于第s个位置
        for(int i=1;i<s;i++)
        {
            current = current->next;
        }
        cout << endl;

        for(int i=1;i<=n;i++) //共循环n轮,得到一个整体的输出序列
        {
            for(int j=1;j<m;j++)
            {
                prev = current;
                current = current->next;
            }
            cout << current->seq << " ";
            prev->next = current->next;
            delete current;
            current = prev->next;
        }
    }

  • 相关阅读:
    HDU 1102 Constructing Roads
    HDU 1285 确定比赛名次。
    最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
    HDU Jungle Roads 1301 最小生成树、
    并查集小结(转)
    HDU hdu 2094 产生冠军 拓扑排序 判定环
    模运算(转)
    拓扑排序(主要是确定环和加法) HDU 2647 Reward
    HDU 1372 Knight Moves 简单BFS
    用计算机模型浅析人与人之间沟通方式 (一)如何谈话
  • 原文地址:https://www.cnblogs.com/jiangxinnju/p/5516895.html
Copyright © 2011-2022 走看看