鱼C论坛

 找回密码
 立即注册
查看: 1141|回复: 6

[已解决]出圈问题

[复制链接]
发表于 2019-12-19 12:15:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有 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[N],s;  // i,j是循环控制变量,s是数组元素个数的变量
     scanf("%d",&m);
         s=N;
    for (i=0;i<s;i++)
                a[i]=i+1;
        for (i=0;i<s;i++)
        {      t++;  
              if (t==m)
                 {  printf("%d\t",a[i]);
                     if (i!=s-1)    //如果下标没有指向数组最后一个元素
                      {  for (j=i;j<s-1;j++)
                       a[j]=a[j+1];         //  数组元素前移覆盖取出的数
                                i--;
                          }
                         else
                          i=-1;                       
                          s--;
                          t=0;
                 }
                if (i==s-1)  //构建无限循环
                        i=-1;
                if (s==0) //退出无限循环
                        break;
        }                                               
        system("pause");
        return 0;
}   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[N],s;  // i,j是循环控制变量,s是数组元素个数的变量
     scanf("%d",&m);
         s=N;
    for (i=0;i<s;i++)
                a[i]=i+1;
        for (i=0;i<s;i++)
        {      t++;  
              if (t==m)
                 {  printf("%d\t",a[i]);
                     if (i!=s-1)    //如果下标没有指向数组最后一个元素
                      {  for (j=i;j<s-1;j++)
                       a[j]=a[j+1];         //  数组元素前移覆盖取出的数
                                i--;
                          }
                         else
                          i=-1;                       
                          s--;
                          t=0;
                 }
                if (i==s-1)  //构建无限循环
                        i=-1;
                if (s==0) //退出无限循环
                        break;
        }                                               
        system("pause");
        return 0;
}   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-19 16:44:42 | 显示全部楼层
答案应该没错,第一次回复,希望楼主采纳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-19 17:23:43 | 显示全部楼层

  1. #define N 6

  2. int func(int m) {
  3.         int i, j,

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

  9.         int a = N - 1;   
  10.         for (i = 0; i  < N-1; ++i) {  //进行n-1轮,每轮1个人出圈
  11.                 for (j = 0; j < m - 1; ++j) {
  12.                         a = nextarr[a];
  13.                 }
  14.                 nextarr[a] = nextarr[nextarr[a]];
  15.         }
  16.         return a + 1;  
  17. }

  18. int main() {
  19.         printf("%d", func(3));
  20. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-19 20:19:15 | 显示全部楼层
楼主能讲下你的程序是如何实现的吗?实在看不懂你的代码哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-21 16:52:32 | 显示全部楼层
大尾巴 发表于 2019-12-19 16:44
答案应该没错,第一次回复,希望楼主采纳

为啥把6换了就不能用了嘞?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-21 19:43:20 | 显示全部楼层
核苷酸 发表于 2019-12-21 16:52
为啥把6换了就不能用了嘞?

我这把 6换成 7 或者8都可以啊  你把你的发个图给我看下哒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 21:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表