1251: 报数游戏

原题链接

Description

n个人站成一行玩一个报数游戏。所有人从左到右编号为1到n。游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等。当编号为n的人(即最右边的人)报完n之后,轮到他左边的人(即编号为n-1的人)报n+1,然后编号为n-2的人报n+2,以此类推。当最左边的人再次报数之后,报数方向又变成从左到右,依次类推。

       为了防止游戏太无聊,报数时有一个特例:如果应该报的数包含数字7或者是7的倍数,他应当用拍手代替报数。下表是n=4的报数情况(X表示拍手)。当编号为3的人第4次拍手的时候,他实际上数到了35。

       给定n,m和k,你的任务是计算当编号为m的人第k次拍手时,他实际上数到了几。

Input

输入包含不超过10组数据。每组数据占一行,包含三个整数n,m和k(2<=n<=100, 1<=m<=n, 1<=k<=100)。输入结束标志为n=m=k=0。

Output

对于每组数据,输出一行,即编号为m的人第k次拍手时,他实际上数到的那个整数。

Sample Input

  1. 4 3 1
  2. 4 3 2
  3. 4 3 3
  4. 4 3 4
  5. 0 0 0

Sample Output

  1. 17
  2. 21
  3. 27
  4. 35

Analyse

用两个变量分别表示报的和当前报数的人的编号,判断报数的人的编号是不是m,如果是m,判断当前是否是7的倍数或者包含数字7,如果满足条件,第m个人拍手次数加1,如果拍手次数和k相同,此时的报数就是结果。

       输入0 0 0程序结束。

Code

  1. import java.util.Scanner;
  2. public class Main {
  3. private Scanner sc;
  4. private int n; // 人数
  5. private int m; // 编号为m的人
  6. private int k; // 拍手次数
  7. // 从1开始
  8. private int numberOfPersons; // 正在报数人的编号
  9. private int currentNumber; // 正在报的数
  10. private int currentTimes; // 第m个人已经拍手的次数
  11. public Main() {
  12. sc = new Scanner(System.in);
  13. while (sc.hasNext()) {
  14. // 输入数据
  15. n = sc.nextInt();
  16. m = sc.nextInt();
  17. k = sc.nextInt();
  18. // 三个全为0,退出
  19. if (0 == n && 0 == m && 0 == k) {
  20. break;
  21. }
  22. count(); // 统计结果
  23. System.out.println(currentNumber);
  24. }
  25. sc.close();
  26. }
  27. private void count() {
  28. // 初始化三个数都为0
  29. numberOfPersons = 0;
  30. currentNumber = 0;
  31. currentTimes = 0;
  32. // 初始时向右报数
  33. int flag = 1;
  34. // 已经拍手次数小于要求拍手次数
  35. while (currentTimes < k) {
  36. // 报数报到了最右边
  37. if (numberOfPersons >= n) {
  38. flag = -1;
  39. }
  40. // 报数报到了最左边
  41. if (numberOfPersons <= 1) {
  42. flag = 1;
  43. }
  44. // 报数加1或减1
  45. numberOfPersons += flag;
  46. // 报的数加1
  47. currentNumber++;
  48. // 轮到第m个人报数了
  49. if (numberOfPersons == m) {
  50. // 第m个人报的数是7的倍数,或者包含数字7
  51. if (0 == currentNumber % 7 ||
  52. String.valueOf(currentNumber).contains("7")) {
  53. // 拍手数加1
  54. currentTimes++;
  55. }
  56. }
  57. }
  58. }
  59. public static void main(String[] args) {
  60. new Main();
  61. }
  62. }

End

WUSTOJ 1251: 报数游戏(Java)的更多相关文章

  1. 编写Java程序,利用List实现报数游戏的实现思路

    返回本章节 返回作业目录 需求说明: 利用List实现报数游戏 在控制台输入一个大于3的正整数,该整数表示有多少人,如在控制台输入10,表示有10个人,10个人围成一个圆圈,从序号1开始为这些人依次编 ...

  2. java实现报数游戏

    报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止.问剩下第几个孩子.下面的程序以10个孩子为例,模拟了这个过程,请完善之(提 ...

  3. WUSTOJ 1285: Factors(Java)

    1285: Factors 参考   hadis_fukan的博客--wustoj 1285 Factors 题目   输入一个数n,找出1~n之间(包括1,n)的质因子最多的数(x)的质因子个数(f ...

  4. 适合刚刚学习编程的萌新:C语言编程学习制作超简单又好玩的报数游戏!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  5. 算法笔记_179:历届试题 数字游戏(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 栋栋正在和同学们玩一个数字游戏. 游戏的规则是这样的:栋栋和同学们一共n个人围坐在一圈.栋栋首先说出数字1.接下来,坐在栋栋左手边的同学要 ...

  6. 俄罗斯方块游戏 --- java

    俄罗斯方块游戏 如有疑问请查看:http://zh.wikipedia.org/zh-tw/%E4%BF%84%E7%BD%97%E6%96%AF%E6%96%B9%E5%9D%97 更多疑问请参考: ...

  7. 生命游戏 Java

    本程序由四个类组成:其中Init_data,用于初始化各个活细胞的状态judge_state,用于判断下一代的细胞状态,并进行更新.set_color,用于给GUI界面中各个细胞涂色set_frame ...

  8. 猜字游戏java

    一.实践目的 1.掌握基本输入输出. 2.掌握方法定义与调用,理解参数传递方式. 3.掌握数组的声明.定义与初始化,数组的处理. 4.掌握数组作为方法参数和返回值. 二.实践要求 利用方法.数组.基本 ...

  9. 人机猜拳游戏Java

    作业要求: 我的代码: package day20181119;/** * 猜拳游戏 * @author Administrator * @version1.0 */import java.util. ...

随机推荐

  1. ansible handlers

    示例:安装nginx --- - hosts: hadoop #指定主机组 remote_user: root #远程执行命令的用户 gather_facts: no #是否获取远程主机的信息 tas ...

  2. PHP 之Html标签转义与反转义

    1.htmlentities()函数转义html 2.html_entity_decode()函数反转义html 我这里是用来反转义富文本编辑器的内容

  3. fixedFluxPressure边界条件【转载】

    转载自:http://blog.sina.com.cn/s/blog_e256415d0102vikh.html fixedFluxPressure是OpenFOAM较新的一个边界条件,表示边界处压力 ...

  4. elasticsearch集群健康状态查看

    1. 查看ES集群健康状态 http://localhost:9200/_cluster/health?pretty 响应: { "cluster_name" : "if ...

  5. 区间最值问题(RMQ)

    题目描述 给出N个数,求第a个数到第b个数之间最大的数减去最小的数的结果 程序输入说明 N(N小于100,000),M(M小于100,000)接下来有N个数接下来M组范围,所有数均在[0,231-1] ...

  6. ROC与AUC的定义与使用详解

    分类模型评估: 指标 描述 Scikit-learn函数 Precision 精准度 from sklearn.metrics import precision_score Recall 召回率 fr ...

  7. 【Oracle】往Oracle11g的某表插入近千万条记录,耗时略超一小时

    和MySql的对比下,两者有数量级的差距. 表ddl: CREATE TABLE tb04 ( "ID" ,) not null primary key, "NAME&q ...

  8. gis空间分析案例教程-下篇预告

    1. 三维空间坐标转换,地理处理工具 2. 3参数,7参数计算,地理处理工具 3. 3参数,7参数坐标转换,地理处理工具 4. 坐标转换工具箱:集成高斯投影,参数计算,坐标转换所有功能. 作业:GIS ...

  9. .NET实体框架EF之CodeFirst

    ADO.NET Entity Framework 以 Entity Data Model (EDM) 为主,将数据逻辑层切分为三块,分别为 Conceptual Schema, Mapping Sch ...

  10. [CareerCup] Single Valid Tree

    https://www.careercup.com/question?id=5103530547347456 Given a list of nodes, each with a left child ...