45567 2022-05-26 10:01 采纳率: 66.7%
浏览 57
已结题

请问这个问题要怎么做呢,能否提供一下思路和标准代码

有N个人围成一圈,顺序排号。

从第一个人开始报数,凡是报数中的尾数为3,或能被3整除,就退出圈子。

问最后留下的是原来第几号的人,最后报数报到多少?

比如:N=3,3个人,从第1号开始,从1开始报数

报数:1 2 3 4 5 6 7

编号:1 2 3(退出) 1 2 1(退出) 2(只剩最后一个人)

最后报数最高是7,剩下的人编号是2

编写代码,要求:

1)用数组保存游戏参加人列表(最多不超过N)

  int LOOP[N];

2)数组取值为1或0,其中1代表参加报数,0代表被淘汰(1 TRUE / 0 FALSE)

3)键盘输入参加人数(人数<N)

4)编写函数处理游戏逻辑,输入指针(数组名)和参加人数(实际参加人数),输出报数最高值和最终胜利人编号

  int loops(int* p, int nums, int* top, int* id);

  p为输入指针,nums为输入人数,top为返回的最高值,id为返回的最终剩下的人编号

5)打印输出最高值和胜利者编号

其中:

1)函数内用 指针++ 操作遍历参加人

2)函数内用 指针赋值 操作完成从队尾到对头的循环

示例:

input: 3

output: id=2, top=7

  • 写回答

2条回答 默认 最新

  • 吕布辕门 后端领域新星创作者 2022-05-26 12:59
    关注

    img


    给你写出来了

    
    #include<stdio.h>
    #define N 50
    
    void main()
    {
        int group[N];
        int totalNum = 0, restNum = 0, count = 0, roundcount = 0; 
    
        scanf("%d", &totalNum);
    
        //排号操作
        for (int i = 0; i < totalNum; i++)
        {
            group[i] = i + 1;
        }
        
        restNum = totalNum;
    
        //只要不只剩下一个人,那么就重复报数
        while (restNum>1)
        {
            roundcount = 0;
            //遍历整个数组,重复报数,直到一轮结束
            while (roundcount < totalNum)
            {
                if (group[roundcount]!=0)
                {
                    count++;
                    //报到3重头报数
                    if (count == 3)
                    {
                        group[roundcount] = 0;//退出的人以0为标识
                        restNum--;
                        count = 0;
                    }                
                }
                roundcount++;
            }
        }
    
        for (int i = 0; i < totalNum; i++)
        {
            if (group[i]!=0)
            {
                printf("%d", group[i]);
                break;
            }
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月3日
  • 已采纳回答 5月26日
  • 修改了问题 5月26日
  • 赞助了问题酬金5元 5月26日
  • 展开全部

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)