2 woshimianbaoquan woshimianbaoquan 于 2016.01.17 07:12 提问

(20分)10个小朋友编号成1-10围成一个圈圈报数

(20分)10个小朋友编号成1-10围成一个圈圈报数,报到3的小朋友退出,求最后剩下的小朋友是几号?用C语言实现

6个回答

caozhy
caozhy   Ds   Rxr 2016.01.17 07:19
已采纳
caozhy
caozhy   Ds   Rxr 2016.01.17 07:20

稍微修改下

 #include<iostream>
#include<malloc.h>
using namespace std; 
struct node 
{
   int no; //代表编号结点的数据
   int code;//代表密码结点的数据
   node *next;//代表后一个结点的地址
};
int main() 
{ 
   int m,n,i,j;
   node *p,*q,*first;
   cout<<"请输入m的初始值 m:";
   cin>>m;
   cout<<"请输入人数 n:";
   cin>>n;
   for(i=1;i<=n;i++)
   {
        if(i==1)
        {
            first=p=(node*)malloc(sizeof(node));
            if(p==0)
                return 0;
        }
        else
        {
            q=(node*)malloc(sizeof(node));
            if(q==0)
                return 0;
            p->next=q;
            p=q;
        }
        cout<<"请输入第 "<<i<<" 个人的密码: ";
        cin>>(p->code);
        p->no=i;
   }
   p->next=first; //让表尾指向表头形成循环链表
   p=first;
   cout<<"出列顺序为: ";
   for (j=1;j<=n;j++)
   {
        for(i=1;i<m;i++,p=p->next);
        m=p->code;
        cout<<p->no<<" ";
        p->no=p->next->no;
        p->code=p->next->code;
        q=p->next;
        p->next=p->next->next;
        free(q);
   }
   cout<<endl;
   return 0;
}
wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.17 08:29

经典的约瑟夫算法,了解了算法思想,百度搜一个就好了。

xianfajushi
xianfajushi   2016.01.17 10:04
enpterexpress
enpterexpress   2016.01.17 12:20
Evinxu
Evinxu   2016.01.17 17:09

![图片说明图片说明 你看看。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!