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

    额,直接上代码:

    typedef struct Node
    {
        int data;
        struct Node *next;
    }Node;
    
    void circle_init(Node *head, const int len);
    void circle_kill(Node *head, int num, const int len);
    void circle_print(Node *head);
    void circle_des(Node *head);
    
    int main()
    {
        int len;
        int num;
        Node head = {0, &head};
        
        printf("输入人数:");
        scanf("%d", &len);
        
        circle_init(&head, len); 
        circle_print(&head);
        
        printf("输入num:");
        scanf("%d", &num);
        
        circle_kill(&head, num, len);
        
        //circle_des(&head);
        return 0;
    }
    
    void circle_init(Node *head, const int len)
    {
        int i = 0;
        Node *p = head;
        
        for(i=0; i<len; i++)
        {
            p->next = (Node *)malloc(sizeof(Node));
            p = p->next;
            p->data = i + 1;
            p->next = head->next;
        }
        
    }
    
    void circle_kill(Node *head, int num, const int len)
    {
        Node *p = head->next;
        Node *temp = NULL;
        int left = len;
        int i = 0;
        do {
            num = num % left;
            for(i=1; i<num-1; i++)
            {
                p = p->next;
            }
            temp = p->next;
            p->next = temp->next;
            p = temp->next;
            printf("%d ", temp->data);
            free(temp);
            left -= 1; 
        }while(left != 1);
        
        printf("%d ", p->data);
        free(p);
        head->next = head;
        
    }
    
    void circle_print(Node *head)
    {
        Node *p = head->next;
        printf("链表:
    ");
        
        do {
            printf("%d ", p->data);
            p = p->next;
        }while(p != head->next);
        
        printf("
    ");
    }
    
    void circle_des(Node *head)
    {
        Node *p = head->next;
        Node *temp = NULL;
        
        
        do {
            temp = p->next;
            free(p);
            p = temp;
        }while(p->next != head->next);
        free(p);
        head->next = head;
    }
  • 相关阅读:
    matlab后处理保存avi动画
    Python3在Windows安装配置及简单试用
    Matlab,C++存取二进制
    批量修改文件名
    这是我的第一篇博客园博客
    android的平台架构及特性
    Android开发学习
    跟着9张思维导图学习Javascript
    如何使用css和jquery控制文章标题字数?
    分离构造器(2-2)
  • 原文地址:https://www.cnblogs.com/buerr/p/7350354.html
Copyright © 2011-2022 走看看