我最近接受了一个黑客挑战问题,我得到了5/9输出正确,错误的4个是隐藏的,但我最好的猜测是,如果我的函数值是实际的浮点变量就会发生。
以下是问题:
有一句古老的说法是每天两次破坏时钟。如果 时钟停在1:20然后它将在凌晨1:20和 下午1:20,写一个接受的函数:
- 破碎时钟秒针的速率
r
。正常时钟每秒移动一次,破碎的时钟将移动r
秒(neg为 向后)- 已过去的小时数
实施例
rate = 0 elapsed hours = 24 result = 2
您可以使用的功能:
static int CountCorrectDisplay(float rate, float elapsedhours)
我得到的是:
class Solution {
static int CountCorrectDisplay(float rate, float elapsedhours) {
int result = 0;
float[] rateNormal = new float[(int) elapsedhours];
float[] rateBroken = new float[(int) elapsedhours];
for (int i = 0; i < rateNormal.length; i++) {
rateNormal[i] = i % 12;
if (rate >= 0) {
rateBroken[i] = (rate * rateNormal[i]) % 12;
} else if (rate < 0) {
rateBroken[i] = (Math.abs(rate + 24) * rateNormal[i]) % 12;
}
if (rateNormal[i] == rateBroken[i]) {
result++;
}
System.out.println("Mult: " + rateNormal[i]);
System.out.println("Rate: " + rateBroken[i]);
System.out.println();
}
return result;
}
public static void main(String[] args) {
System.out.println(CountCorrectDisplay(12, 24));
}
}
如果放置浮动值(如1.15,12.5),则会出现错误 如果经过的时间是一个浮点值,我很可能没有考虑到这一点。如果我在coderpad上尝试它,我会收到警告,告诉我转换可能不一样。
修改
其中一个错误是Out of Bounds。我猜这是因为如果经过的小时是12.5,我需要为我的数组增加1个元素大小。我需要一些逻辑来检查elapsedhours是否有十进制值大于0,而不是我可以添加一个到我的数组的大小。
我还看到我需要将我的十进制值转换为时间。十进制值很可能是60的百分比。所以12.5,取0.5,然后花60分钟的50%给你30分钟。我在考虑速率的相似逻辑(以秒为单位)