一道c语言问题,直接不会啊,帮忙写一串代码,好吗

题目描述有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。输入包含多组数据。每行表示初始人数n。(0<... 题目描述
有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
输入
包含多组数据。
每行表示初始人数n。(0<n<1000000)
最后一样是0,不用处理。
输出
对每个测试数据输出最后一人的初始编号
样例输入
3
7
0

样例输出
2
4
展开
 我来答
微星time
推荐于2016-10-04 · TA获得超过161个赞
知道答主
回答量:106
采纳率:0%
帮助的人:68万
展开全部
#include<stdio.h>
struct node
{
    int data;//数据域
    node *next; //指针域
};
int main()
{
 int n,m=3,i;
 while(scanf("%d",&n)&&n!=0)
 {
  node *L=NULL,*s,*tail,*pre;
    for(i=1;i<=n;i++)  //建立循环链表 
    {
        s = new node;
        s->data = i;
        if(i == 1)  L=s; 
        else tail->next = s;
        tail = s;
    }    
    tail->next = L;
 int count=1; 
    s = L;   //s指向当前正数到的人
    pre = tail;        
    while(s->next!=s) //多于一个结点时 
    {
      while(count<m)
       {
               count++;
               pre = s ;
               s = s->next;
       }
          
           //数到第m个时,删除一个结点(即杀死一人)
        pre->next = s->next; 
        delete s;  
        s = pre->next;
        count=1;     
    }  
    printf("%d\n",s->data) ;
 //cout<<s->data<<endl;
 }
 
  
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式