user-0 提问: 【C语言求助】n个人围成一圈1~3循环报数，不断剔除报到3的人，找出剩下的人的序号

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 再多用用，就熟练了。

user: user-0
content: 引用 3 楼 qzjhjxj的回复:供参考：void main() {     int people[1000],n_5;     printf("Please enter the number of people:\n");     scanf("%d",&n_5);      for(int i=0;i<n_5;i++)     {         people[i]=i+1;     }      int *p_5=people;     int remain=n_5,num_off=0;     while(remain>1)//剩下的人数大于1     {         p_5 = people; //这里相当于把数组首尾相连         while((p_5)<=(people+n_5-1))//判断是否到了数组尾，到尾部跳出重新一轮         {                           //这里循环都是一个n的长度              if(*p_5!=0)//判断有没有出圈，如果已经出圈了就跳过，进入p_5++下一位数据判断             {                num_off++;//没出圈的才计数值加1                 if( num_off==3)                 {                   printf("此为报到3的数：*p_5=%d num_off=%d\n",*p_5,num_off);//便于观察过程                   *p_5=0;                   remain--;//总人数减一                   num_off=0;//从0开始重新计数                 }             }                      //printf("*p_5=%d num_off=%d\n",*p_5,num_off);//便于观察过程             p_5++; //数组下一个数据         }     }      p_5 = people; //此时要让p_5指针回到数组的首部位置      while(*p_5==0)//找到最后不是0的位置             p_5++;     printf("The number of remained one is:%d \n",*p_5);      } 谢谢！while循环太难搞了🤒

user: user-0
content: 引用 2 楼 赵4老师的回复:仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }  好的，谢谢！

user: user-0
content: 引用 1 楼 user-4的回复:建议自己调试一下，调试能力跟编码能力同样重要，甚至更重要 知道的，谢谢！这个已经是调了好多遍了，还是不行😭

user: user-2
content: 供参考：void main() {     int people[1000],n_5;     printf("Please enter the number of people:\n");     scanf("%d",&n_5);      for(int i=0;i<n_5;i++)     {         people[i]=i+1;     }      int *p_5=people;     int remain=n_5,num_off=0;     while(remain>1)//剩下的人数大于1     {         p_5 = people; //这里相当于把数组首尾相连         while((p_5)<=(people+n_5-1))//判断是否到了数组尾，到尾部跳出重新一轮         {                           //这里循环都是一个n的长度              if(*p_5!=0)//判断有没有出圈，如果已经出圈了就跳过，进入p_5++下一位数据判断             {                num_off++;//没出圈的才计数值加1                 if( num_off==3)                 {                   printf("此为报到3的数：*p_5=%d num_off=%d\n",*p_5,num_off);//便于观察过程                   *p_5=0;                   remain--;//总人数减一                   num_off=0;//从0开始重新计数                 }             }                      //printf("*p_5=%d num_off=%d\n",*p_5,num_off);//便于观察过程             p_5++; //数组下一个数据         }     }      p_5 = people; //此时要让p_5指针回到数组的首部位置      while(*p_5==0)//找到最后不是0的位置             p_5++;     printf("The number of remained one is:%d \n",*p_5);      }

user: user-3
content: 仅供参考：//假设有n个人团团围做，从第1个人开始数数，数到第m个人时候，第m个人出列， //然后继续从1开始数数，数到第m个人退出 #include <stdio.h> #include <conio.h> int i,k,t; int n,m; static char f[1001];//0该座位未出圈,1该座位已出圈 void main() {     while (1) {         printf("Input n m(1000>=n>=m>=1):");         fflush(stdout);         rewind(stdin);         if (2==scanf("%d%d",&n,&m)) {             if (1000>=n && n>=m && m>=1) break;         }     }     t=0;//已出圈总人数     i=1;//座位编号     k=1;//当前要数的数     while (1) {         if (0==f[i]) {             if (m==k) {                 t++;                 f[i]=1;                 printf("%3d ",i);                 if (0==t%10) printf("\n");                 if (t>=n) break;             }             k++;if (k>m) k=1;         }         i++;if (i>n) i=1;     }     cprintf("Press any key ...");     getch(); }

user: user-4
content: 建议自己调试一下，调试能力跟编码能力同样重要，甚至更重要