zoukankan      html  css  js  c++  java
  • 约瑟夫环问题(c++)

    #include <iostream>
    
    struct node{
        int payload;
        node* next;
        node(int payload){this->payload = payload;}
    };
    
    class joseph_circle{
        node* tail;
        node* eliminate_ptr;
    public:
        joseph_circle(){tail =nullptr;}
        void add(int value){
            if(tail ==nullptr){
                tail= new node(value);
                tail->next = tail;
            }else{
                node* new_node = new node(value);
                new_node->next = tail->next;
                tail->next = new_node;
                tail = new_node;
            }
        }
    
        void eliminate(int step){
            node* p = tail;
            while(p!=nullptr && p->next!=p){
                for(int i=0;i<step-1;i++){
                    p =p->next;
                }
                node* eliminated_node = p->next;
                p->next = p->next->next;
                if(eliminated_node ==tail)
                    tail =p;
                std::cout << "deleting:" << eliminated_node->payload << std::endl;
                delete eliminated_node;
                output();  
            }
        }
    
        void output(){
            node* p = tail;
            while(p != nullptr){
                p=p->next;
                std::cout << p->payload << " ";
                if(p==tail)
                    break;
            }
            std::cout << std::endl;
        }
    };
    
    int main(){
        joseph_circle circle;
        for(int i=0;i<6;i++){
            circle.add(i);
        }
        circle.eliminate(3);
        system("pause");
        return 0;
    }
  • 相关阅读:
    NYOJ458
    NYOJ67
    NYOJ105
    NYOJ1071
    NYOJ463
    C语言练字用小软件 — Practise_Calligraphy_1.0(ANSI)
    NYOJ276
    NYOJ455
    NYOJ74
    Jzoj4458 密钥破解——Pollard-rho
  • 原文地址:https://www.cnblogs.com/zychengzhiit1/p/5789485.html
Copyright © 2011-2022 走看看