英雄会-----报数游戏(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