zoukankan      html  css  js  c++  java
  • 循环链表之约瑟夫问题

    约瑟夫问题

    (上课结束,大家听说第一周没有编程题目,立刻就被鄙视了,为了纠正这个错误,咱们本周就来做点简单题目。本题要求用循环链表实现)

    约瑟夫问题是一个经典的问题。已知n个人(不妨分别以编号1,2,3,…,n 代表 )围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, ...,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。

    输入:n, k, m

    输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。

    非法输入的对应输出如下

    a)

    输入::n、k、m任一个小于1
    输出:n,m,k must bigger than 0.

    b)

    输入:k>n

    输出:k should not bigger than n.

    例:

    输入:9,3,2

    输出:4 6 8 1 3 7 2 9 5

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct node
    {
        int No;
        struct node * next;
    }N, *PN;
    
    int main()
    {
        int n, k, m, i, j=1;
        PN head, tmp, p, q;
        head = (PN)malloc(sizeof(N));
        head->next = NULL;
        scanf("%d",&n);
        getchar();
        scanf("%d",&k);
        getchar();
        scanf("%d",&m);
    
        if (n<1 || k<1 || m<1)
        {
            printf("n,m,k must bigger than 0.
    ");
            return 0;
        }
        if (k>n)
        {
            printf("k should not bigger than n.
    ");
            return 0;
        }
        for (i=0; i<n; i++)
        {
            tmp = (PN)malloc(sizeof(N));
            if (i==0) q = tmp;
            tmp->next = head->next;
            head->next = tmp;
            tmp->No = n-i;
            if (tmp->No == k)
                p = tmp;
        }
        q->next = head->next;
        while (n--)
        {
            for (i=1; i<m; i++)
            {
                p = p->next;
            }
            printf("%d",p->No);
            p->No = p->next->No;
            if (n == 0 || ((j++)%10==0)) printf("
    ");
            else printf(" ");
            q = p->next;
            p->next = q->next;
            free(q);
        }
        free(head);
        return 0;
    }
  • 相关阅读:
    组件ListWidget 继承StatefulWidget后动态传入List数据,组件并不会重新渲染。
    Spring Security 采用httpBasic模式认证
    基于Vue2.0实现OpenLayers MarkerCluster海量聚合点标记
    Spring Security 采用formLogin模式认证
    配置页面兼容360浏览器
    如何进行企业工作流选型
    IT项目管理的六种错误思维
    时间管理10项技巧
    一个项目涉及到的50个Sql语句(下)
    SQL Server2000存储过程调试
  • 原文地址:https://www.cnblogs.com/weir007/p/5913993.html
Copyright © 2011-2022 走看看