关于京东笔试幸运数字
首先关于f(x)函数和g(x)函数,我是这样写的,效率肯定不高,但是反正能用
// 定义f(x)函数
public static int f(int x) {
int sum = 0;
int temp = x;
while (temp != 0) {
sum += temp % 10;
temp /= 10;
}
return sum;
}
//定义g(x)函数
public static int g(int x) {
int sum = 0;
int temp = x;
while (temp != 0) {
sum += temp % 2;
temp /= 2;
}
return sum;
}
然后我取了巧,题目中说明了,数组的组数T<10000,每组数n<100000
然后我之前每次提交的时候都是说我时间超限~~~估计这编译器要求要快吧。所以其实需要把幸运数字记录下来。
int[] record = new int[1000001];
//直接计算1到100000
luckyNumberCountBetweenXAndY(1,100000);
//从x到y之间的luckyNumber数量
public static void luckyNumberCountBetweenXAndY(int x,int y){
for(int j=x;j<=y;j++){
if(f(j)==g(j)){
record[j] = true;
}else{
record[j] = false;
}
}
}
简单说就是直接计算1-100000的幸运数字,记录哪些是幸运数字,然后算的时候直接根据布尔数组统计就可以了,这样速度应该会快很多。
可惜我想到这个方法的时候还有几分钟的了~~~~
最后编译的结果是说我的结果错了(糟心的OJ,就只知道结果错误,不给具体的结果,真的不知道哪里错了啊~~~)

