在处理google foobar问题时,我遇到了以下提示:
布朗是一位臭名昭着的疯狂科学家,刚刚发现他珍贵的兔子标本已经逃脱了!他急忙在实验室电话上打电话给他的安全人员。然而,兔子逃脱者砍掉手机以加速逃跑!她留下了一个带有以下线索的标志:拨打的每个数字必须是一个骑士国际象棋棋子从最后拨打的数字到达的数字 - 也就是说,你必须在一个方向上精确移动2个空格,然后1垂直方向的空间拨打下一个正确的号码。您可以拨打任何想要开头的号码,但后续号码必须遵守骑士的移动规则。实验室电话的编号方式如下:第一排1,2,3;第二排4,5,6;第7行,第8行,第9行;和空白,0,第四行空白。
1 2 3
4 5 6
7 8 9
0
例如,如果您刚刚拨打1,则您拨打的下一个号码必须是6或8.如果您刚刚拨打了6,则下一个号码必须是1或7.
布尔教授希望您了解他可以在这些条件下拨打多少个不同的电话号码。编写一个名为answer(x,y,z)的函数,该函数计算一个可以拨打的电话号码的数量,该号码以数字x开头,以数字y结尾,并且总共包含z个数字。将此数字输出为表示基数为10的数字的字符串。
x和y将是从0到9的数字.z将介于1和100之间(包括1和100)。
测试用例
输入: (int)x = 6 (int)y = 2 (int)z = 5 输出: (字符串)" 6"
输入: (int)x = 1 (int)y = 5 (int)z = 100 输出: (字符串)" 0"
输入: (int)x = 3 (int)y = 7 (int)z = 1 输出: (字符串)" 0"
我觉得第一个测试用例是错误的,因为在绘制出决策树后,我发现的唯一数字是61672,67272,67292,67672,这只有4个。 是否有一些我对这个问题的误解或遗漏?
答案 0 :(得分:2)
我不认为测试用例是错误的,但声明
如果您刚刚拨打了6,则下一个号码必须是1或7。
错了。无法从6到0得到这个问题没有任何意义。至于你的评论,空白不是有效的动作,但这与6有什么关系 - > 0有效吗?
1 2 3
4 5 6
7 8 9
0
显然6 - > 0是有效的移动,不涉及空白。