2014-12-06 115 views
1

在处理谷歌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,这只有四个。 有什么我误解或错过这个问题?

+2

您错过了60492和60672 – adamdc78 2014-12-06 07:11:03

+0

我的印象是,既然问题中提到“如果您只是拨打了6,下一个数字必须是1或7”,那么空白不会被认为是有效的移动 – lying 2014-12-07 07:36:58

+1

问题描述包含错误。如果你刚刚拨6,下一个号码可以是1,7或0。 – 6502 2014-12-07 08:13:37

回答

2

我不认为测试用例是错误的,但声明

如果你只是拨了一个6,未来数必须是1或7

是错误的。不能从6到0使问题没有任何意义。至于你的评论,空白不是有效的动作,但是这与6 - > 0有效有什么关系?

1 2 3 
4 5 6 
7 8 9 
    0 

显然6→0是一个有效的举动,不涉及空白。