数据结构--------约瑟夫环

约瑟夫环问题,,顺时针报数。输入输出格式如下

输入:

5 \代表5个同学

3 \从第3个人开始报数

3 \数多少出列,比如第一个人开始报1,第三个人报3,出列

输出:

1 \最后留下的同学是第几人

输入输出样例:1组
#1

样例输入:

5
3
3

样例输出:

1
//注意
    //1:该程序每次运行的时间必须小于10秒,否则会超时,程序超时将不会测试剩余的测试集
    //2:该程序每次运行使用的内存不能超过1M,否则会返回错误
    //3:该程序每次运行输出的结果最多显示1000个字符(多余的不显示),每行末尾的所有空格用□表示
#include <iostream>
using namespace std;

typedef struct Incode
{
    int index;
    struct Incode *next;
}LNode,*LinkList;

LinkList Create_List(int n);
void Josephus(LinkList head,int n,int k,int l);
int main()
{
    int n;
    cin>>n;//输入有几个人
    LinkList L;
    L=Create_List(n);
    int k,l;
    cin>>k;//从第k个人开始数
    cin>>l;//数到l出列
    Josephus(L,n,k,l);
    return 0;
}
void Josephus(LinkList head,int n,int k,int l)//从第m个人开始数,数到n的人出列
{
    LNode *p;
    p=head;
    if(k==1&&l==1){cout<<n;return;}
    for(int i=1;i<k;i++)
    {
        p=p->next;
    }
    if(l==1){cout<<p->index-1;return;}
    while(p->index!=p->next->index)
    {
        for(int j=1;j<l-1;j++)
        {
            p=p->next;
        }
        p->next=p->next->next;
        if(p->index!=p->next->index)
            p=p->next;
    }
    cout<<p->index;
}
LinkList Create_List(int n)//建立单循环链表
{
    LinkList head;
    head = new LNode;
    head->next = head;
    head->index=0;

    LNode *p, *q;
    p = head;
    for(int i = 1; i <= n; i++)
    {
        q = new LNode;
        q->index=i;
        q->next = NULL;
        p->next = q;
        p = q;
    }
    p->next=head->next;
    head=head->next;
    return head;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值