• 约瑟夫问题


    额,直接上代码:

    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;
    }
  • 相关阅读:
    IIS7中启用JS的压缩
    .NET中使用WINDOWS API参数定义
    IE6下的JQUERY_FCK兼容问题
    移动native+HTML5混搭应用感受
    【翻译】Fixie.js——自动填充内容的插件
    JSON辅助格式化
    【记录】导致notifyDataSetChanged无效的一个错误
    【Perl】批量word和PPT文档转pdf
    【记录】有关parseInt的讨论
    手机滑动应用
  • 原文地址:https://www.cnblogs.com/buerr/p/7350354.html
Copyright © 2020-2023  润新知