英雄会-----报数游戏(3) - crazy_jack - 博客频道 - CSDN.NET
一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28……)
或者包含数字7的数(7,17,27,37……)就用拍手代替这个数而不能报出。
假设你连续听到m声拍手,问造成你听到m声拍手的第一下拍手所代表的数是几?
例如,你听到了两次连续的拍手,最小的可能这两次拍手是27和28,因此输出27。
输入m, 输出这m次连续的拍手第一下所代表的最小可能的数。
一种报数游戏是从1开始连续报数,如果报到7的倍数(7,14,21,28……)
或者包含数字7的数(7,17,27,37……)就用拍手代替这个数而不能报出。
假设你连续听到m声拍手,问造成你听到m声拍手的第一下拍手所代表的数是几?
例如,你听到了两次连续的拍手,最小的可能这两次拍手是27和28,因此输出27。
输入m, 输出这m次连续的拍手第一下所代表的最小可能的数。
int Seven(int num) //包含数字7 { while (num > 0) { if (num % 10 == 7) return 1; num /= 10; } return 0; } int number (int m) { int start = 1; //由1开始 int count = 0; //连续的个数 int n = start; //初始点 while (count < m) //连续的个数 { if (start % 7 == 0 || Seven(start) == 1) { if (count == 0) //重新计数,修改初始n { n = start; } count++; } else count = 0; //非连续 start++; } return n; }
private static boolean isStopNum(int num) { if (num < 1) { return false; } if ((num % 7 == 0) || (String.valueOf(num).indexOf("7") != -1)){ return true; } return false; } public static int getMinNum(int count) { if (count < 1) { return 0; } int minCount = 0; //保存连续isStopNum的数字个数 for(int i = 1; i < Character.MAX_VALUE; i++) { if (isStopNum(i)) { minCount++; if (minCount == count) { return i - count + 1; } } else { minCount = 0; } } return 0; }Read full article from 英雄会-----报数游戏(3) - crazy_jack - 博客频道 - CSDN.NET