问题描述

有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。
  问最后留下的是原来第几号的那位。
  举个例子,8个人围成一圈:
  1 2 3 4 5 6 7 8
  第1次报数之后,3退出,剩下:
  1 2 4 5 6 7 8 (现在从4开始报数)
  第2次报数之后,6退出,剩下:
  1 2 4 5 7 8 (现在从7开始报数)
  第3次报数之后,1退出,剩下:
  2 4 5 7 8 (现在从2开始报数)
  第4次报数之后,5退出,剩下:
  2 4 7 8 (现在从7开始报数)
  第5次报数之后,2退出,剩下:
  4 7 8 (现在从4开始报数)
  第6次报数之后,8退出,剩下:
  4 7 (现在从4开始报数)
  最后一次报数之后,4退出,剩下:
  7.
  所以,最后留下来的人编号是7。
输入格式
  一个正整数n,(1<n<10000)
输出格式
  一个正整数,最后留下来的那个人的编号。
例子

样例输入
8
样例输出
7

跟前几天写那个狡猾的老鼠那道题99%一样,代码放上了,就是巧妙的模拟就是了。

#include <stdio.h>
#define m 3
int main ()
{int n,n1,step,i;scanf("%d",&n);int a[n];for(i=0;i<n;i++)a[i]=0;n1=n;i=0;while(n1>1){step=m;while(1){i++; if(i==n)i=0;if(a[i]==0)step--;if(step==0)break;} a[i]=1;n1--;}for(i=0;i<n;i++){if(a[i]==0)printf("%d\n",i);}return 0;
}

在其他博主那看到另一种表达,也很不错呢:
他的思路:定义一维数组, 数组下标表示人的编号, 值表示是否出局(1为出局), 先将数组元素全部初始化为0, 然后定义两个整型变量 num 表示人的编号和 count 其所报的数(i 在0~2循环, 0即表示报数为3,则出局),再定义一个整型变量left记录剩余人数, 剩余1人时退出循环。此人为胜者并输出其编号。

#include <stdio.h>int main(){int a[10000] = {0};int sum;  //总人数 int num, count, left;scanf("%d", &sum);left = sum;for(num=0,count=1; ; num=(num+1)%sum){if(a[num] == 1)  //若此人出局则继续找下一位未出局的人 continue;if(count==0){   //若此人报数为 0 则此人出局 a[num] = 1;left--;if(left == 1)break;}count=(count+1)%3;}for(num=0; num < sum; num++)  //在数组中找到唯一未出局的人 if(a[num]==0)break;printf("%d", num+1);return 0;
}

算法训练 - 筛选号码 (有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子。从下一个人开始继续报数,直到剩下最后一个人,游戏结束。)相关推荐

  1. 题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成

    题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成 #include <stdio.h> in ...

  2. 有n个人,顺序排列, 并首尾相连围成一圈。从第一个人开始报数(从1到4),凡报到4的人退出圈子+扩展版本

    https://blog.csdn.net/qq_44037213/article/details/106551760?fps=1&locationNum=2 有n个人(n<=1000) ...

  3. 有n个人围成一圈 顺序排号 java_java基础编程题有n个人围成一圈顺序排号

    下面给大家带来的这道编程题可以算得上是一道非常基础的java编程题目,刚刚开始接触java编程的小伙伴一起来看看具体的题目以及解题方法吧. 下面是具体的题目,题目还是非常的简单的. 一.题目 有n个人 ...

  4. c/c++ 有n个人围成一圈, 顺序排号。从第1个人开始报数(从1~3报数), 凡报到3的人退出圈子, 问最后留下的人原来排在第几号。

    解题思路的重要性显现出来了 比如这个题 n个人肯定是要用数组 毋庸置疑 那么报数怎么实现呢 可以设置一个循环变量 让他从0开始循环 当等于3 的时候 就归零 还有 n个人 肯定需要很多圈报数 这个很多 ...

  5. 有n个人围成一圈 顺序排号 java_java有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出...

    public class Test { public static void main(String[] args) { // 测试数据 ArrayList list = new ArrayList( ...

  6. 当当笔试题(有n个人成一圈,顺序排号(编号为1到n),从第一个人开始报数1到3报数),凡报到3的人出圈子,从下个人开始继续报数,直到最后一个人,问最后留下在是第几号?)

    -举例 12345678 第一次3走,第二次6走,第三次1走 import java.util.ArrayList; import java.util.Scanner;public class dan ...

  7. 约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。...

    首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们! 然后今天群里突然有人提出了题目的这个问题: 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人 ...

  8. 有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

    有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下的是原来第几号的那位. 方法一:(用指针指向malloc开辟的动态数组) #include <s ...

  9. 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。

    [绕圈报数] 1130 更新 ======== 一般化情况 13个人围成一圈,从第1个人开始顺序报号1.2.3,凡报到3的人退出圈子.找出最后留在圈子里的人原来的序号. 输出提示 "出圈成员 ...

最新文章

  1. Python程序设计题解【蓝桥杯官网题库】 DAY2-IDLE与基础练习
  2. VS和Eclipse自动注释比较
  3. oracle9i用expdp导出全库,Linux下Oracle 11g数据库全库自动备份(EXPDP)
  4. 河源电大有考计算机等级的吗,河源电大有什么专业自考也有?
  5. java开发保险案例_Java实现双保险线程的示例代码
  6. 应用服务器——tomcat架构分析
  7. -bash: belts.awk: command not found
  8. 两个孤寡老人不领证同居在一起合适吗?
  9. 注册登录时本地图片验证码
  10. android判断是华为手机,华为手机怎么辨别真假?华为手机真伪验证多种方法
  11. 查看文件的MD5 值
  12. 关注Oracle 02 财务系统的选型想说简单不容易
  13. 为什么要了解计算机发展史,计算机发展史给我的启示
  14. hive查看一张表的分区字段_Hive表分区与索引
  15. java计算机毕业设计校园共享单车系统源代码+系统+数据库+lw文档
  16. 【apache lang3】import org.apache.commons.lang3.StringUtils error----Cannot resolve symbol ‘lang3‘
  17. 360buy二次融资
  18. 电子学会青少年软件编程 Python编程等级考试一级真题解析(判断题)2021年12月
  19. 【VBA】给单元格设置背景色
  20. 烟台职称计算机考试时间,2015年烟台职称计算机考试报名时间和有关事项通知...

热门文章

  1. c51中断优先级c语言,基于proteus的51单片机开发实例(14)中断嵌套和中断优先级...
  2. 金三银四过后整理出的阿里最新Java程序员面试题目(2018.4月)
  3. 最近遇到的异常与错误总结
  4. .blade.php,Blade 模板 |《Laravel 5.4 中文文档 5.4》| Laravel China 社区
  5. RF SeleniumLibrary 关键字分类解读
  6. 郊区春游 (状压dp)
  7. 【人工智能项目】Fashion Mnist识别实验
  8. Tomcat日志记录post请求参数
  9. 云联惠认证时间_警方要求云联惠涉案成员限期投案,是自首寻求轻判的最佳时机...
  10. 极智AI | 一文看懂昇腾达芬奇架构计算单元