标题:N个人围城一圈报数,报到3退出的问题
取消只看楼主
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
结帖率:100%
已结贴  问题点数:20 回复次数:1 
N个人围城一圈报数,报到3退出的问题
N个人围城一圈报数,报到3退出的问题 ,如123 则最后剩下2, 第一个代码错误,第二个正确  第一个错在哪呀?

#include <stdio.h>
int main()
{int i,k,m,n,num[50],*p;
 printf("\ninput number of person: n=");
 scanf("%d",&n);
 p=num;
 for (i=0;i<n;i++)   //将输入的人排序
   *(p+i)=i+1;        
 i=0;                 
 k=1;                //k记录123报数
 m=0;               //m 退出的人数
 while (m<n-1)        
 {
if (*(p+i)!=0)    //当前数不是0,指向下一个数,且报数加1,是0的话,指向下一个数,但报数不变
     {
      i++;
      k++;
     }
     else i++;
     if (k==3)          //报3,指向下一个数,将k恢复成1   
     {
      *(p+i)=0;
      k=1;
      i++;
      m++;
     }
   if (i==n) i=0;               
   }
 while(*p==0) p++;
 printf("The last one is NO.%d\n",*p);
 return 0;
}


第二个
#include <stdio.h>
int main()
{int i,k,m,n,num[50],*p;
 printf("\ninput number of person: n=");
 scanf("%d",&n);
 p=num;
 for (i=0;i<n;i++)
   *(p+i)=i+1;        
 i=0;                 
 k=0;                  
 m=0;               
 while (m<n-1)        
  {if (*(p+i)!=0)  k++;
   if (k==3)                     
     {*(p+i)=0;
      k=0;
      m++;
     }
   i++;
   if (i==n) i=0;               
   }
 while(*p==0) p++;
 printf("The last one is NO.%d\n",*p);
 return 0;
}
搜索更多相关主题的帖子: include person number 围城 记录 
2015-09-08 15:50
yz912498286
Rank: 1
等 级:新手上路
帖 子:49
专家分:3
注 册:2015-8-24
得分:0 
回复 楼主 yz912498286
把语法错误该过来后还有问题  两个逻辑好像有区别 第一个输出的是1  第二个输出的是2  不知道区别在哪
2015-09-08 16:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-457106-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.068562 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved