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

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

http://blog.csdn.net/newnewman80/article/details/5989449

稍微修改下

 #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;
}

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

猴子选大王——CSharp数组

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