EminemZC 发表于 2019-12-19 12:15:06

出圈问题

有 N 个人围成一圈参加游戏,游戏的规则是: N个人的编号分别为1、2、……、N,以编号为‘1’的人开始报数,报到M时该人跳出圈子,下一人继续重新报数。按此要求依次输出所有跳出圈子人员的编号。
例如:N=6,M=3时,出圈人的序号分别是:3,6,4,2,5
要求:将N定义成符号常量,可以在程序中修改其值。程序允许在键盘上输入M的值,然后将出圈人的序号依次输出。

大尾巴 发表于 2019-12-19 16:43:09

#include<stdio.h>
#include <stdlib.h>
#define N 6
int main(void)
{   int i,j,m,t=0,a,s;// i,j是循环控制变量,s是数组元素个数的变量
   scanf("%d",&m);
       s=N;
    for (i=0;i<s;i++)
                a=i+1;
        for (i=0;i<s;i++)
        {      t++;
              if (t==m)
                 {printf("%d\t",a);
                     if (i!=s-1)    //如果下标没有指向数组最后一个元素
                      {for (j=i;j<s-1;j++)
                       a=a;       //数组元素前移覆盖取出的数
                                i--;
                          }
                       else
                          i=-1;                       
                          s--;
                          t=0;
                 }
                if (i==s-1)//构建无限循环
                        i=-1;
                if (s==0) //退出无限循环
                        break;
        }                                               
        system("pause");
        return 0;
}   

大尾巴 发表于 2019-12-19 16:44:42

答案应该没错,第一次回复,希望楼主采纳

Croper 发表于 2019-12-19 17:23:43


#define N 6

int func(int m) {
        int i, j,

        int nextarr; //构建数组,其值为下一个人的位置;
        for (i = 0; i < N - 1; ++i) {
                nextarr = i + 1;
        }
        nextarr = 0;

        int a = N - 1;   
        for (i = 0; i< N-1; ++i) {//进行n-1轮,每轮1个人出圈
                for (j = 0; j < m - 1; ++j) {
                        a = nextarr;
                }
                nextarr = nextarr];
        }
        return a + 1;
}

int main() {
        printf("%d", func(3));
}

大尾巴 发表于 2019-12-19 20:19:15

楼主能讲下你的程序是如何实现的吗?实在看不懂你的代码哦

核苷酸 发表于 2019-12-21 16:52:32

大尾巴 发表于 2019-12-19 16:44
答案应该没错,第一次回复,希望楼主采纳

为啥把6换了就不能用了嘞?

大尾巴 发表于 2019-12-21 19:43:20

核苷酸 发表于 2019-12-21 16:52
为啥把6换了就不能用了嘞?

我这把 6换成 7 或者8都可以啊你把你的发个图给我看下哒
页: [1]
查看完整版本: 出圈问题