xcode-C语言出接触_约瑟夫环_循环链表


要求..

约瑟夫环问题的具体描述是:设有编号为1,2,......,nn(n>0)个人围成一个圈,从第一个人开始报数,报到m 时停止报数,报m 的人出圈,再从他的下一个人起重新报数,报到m 时停止报数,报m 的出圈,......,如此下去,知道只剩下一人为止。当任意给定n m 后,设计算法求n 个人出圈的次序。 

#import <Foundation/Foundation.h>

struct node{

    int data;

    struct node * next;

};

struct node  *head = NULL,*new,*end,*p;// new 为新建节点, end为尾节点,head 为头结点

int main(int argc, const char * argv[]) {

    

    int n = 0;

    int m = 0;

    printf("请输入n的值:\n");

    scanf("%d",&n);

    printf("请输入m的值:\n");

    scanf("%d",&m);

    for(int i = 1; i < n+1; i++){

        new = (struct node *)malloc(sizeof(struct node));

        new->data=i;

        new -> next = NULL;

        if (i == 1) {

            head = new;

            end = new;

        }else{

            end->next = new;

            end = new;

        }

    }

    end->next=head;

    

    //定义 p 为一直寻找m个数据后的指针,开始的时候,为头指针

    p = head;

    int num=1;//表示是否为第一次剔除人, 如果num为1 则第一次剔出人,如果等于2 则不是第一次剔出人

    int x =1;    //记录第几次 被剔除, 没有什么实际意义

    while (n > 1) {

        if(num == 1){

            for (int i = 1; i< m-1; i++) {

                p = p->next;

                

            }

            num= 2;

        }else{

            for (int i = 0; i< m-1; i++) {

                p = p->next;

                

            }

        }

        printf("%d  %d\n",p->next->data,x);

        p->next = p->next->next;

        x++;

        

        n--;

        

    }

    printf("最后输出的是:%d\n",p->next->data);

    return 0;

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值