我在接受采访时被要求对以下场景进行编码
电视有0-450个频道但是远程按钮2,5,8,9发生故障所以写一个程序来获取用户的输入并通过最短的路径遍历该频道
例:
47 - >无需遍历按钮4,7可用
45 - > 44 + 1输出来自哪个通道以及需要多少次遍历才能达到45.
55-> 55可以从47到达只有coz 54有5. ||| ly(50-55)其中有5个所以48和49分别有8和9.
我已经尝试了我的逻辑但是甚至无法以这样的方式编码它是所有输入的最佳最短路径请PLEASE帮助我使用逻辑或向我展示程序.
*更新并检查错误,最终解决方案可能是这样的:
public static void Traverse(int channelToAccess, int maxChannels, params char[] brokenButtons)
{
int result = -1; // closest channel num
for (int i = 1; result == -1 && i > 0 && i < maxChannels; i++)
{
if (!(channelToAccess + i).ToString().Any(brokenButtons.Contains)) { result = channelToAccess + i; break; }
if (!(channelToAccess - i).ToString().Any(brokenButtons.Contains)) { result = channelToAccess - i; break; }
}
int difference = result - channelToAccess;
Console.WriteLine("To open channel {0} you should turn channel {1} and press {2} button {3} times", channelToAccess, result, difference > 0 ? "-" : "+", Math.Abs(difference));
}
Run Code Online (Sandbox Code Playgroud)
使用示例:Traverse(255, 450, '2', '5', '8', '9');
输出:要打开通道 255,您应该转动通道 300 并按按钮“-”45 次
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |