【发布时间】:2011-03-21 11:09:02
【问题描述】:
我希望这不是一个骗局,但很难将问题归结为关键字!
这一直是我想知道的事情。假设您有一个黑匣子,它将 n 个整数作为输入(其中 n > 1)。鉴于整数值有一个界限,你将如何编写一个将整个样本空间推过黑匣子的算法? (如果 n 可以在运行时指定,则加分)
我在 n = 2 时的尝试如下:
int min = 0;
int max = 9;
int a = min;
int b = min;
while(a <= max && b <= max)
{
blackBox(a, b);
a++;
if(a > max)
{
a = min;
b++;
}
}
上面的代码适用于两个变量,但正如您可能猜到的那样,当 n 接近两位数时,我的算法变得非常丑陋。
除了像我做的那样嵌套 if 语句之外,还有更好的方法吗?
我知道一个不好的方法,那就是为每次迭代随机生成值并保存以前迭代的输入,这样你就不会用相同的变量戳黑盒子两次。但是,我希望有一种更快的方法,因为随着唯一黑盒调用的数量接近 (max - min + 1) ^ n
,碰撞确实会影响执行时间【问题讨论】:
标签: algorithm language-agnostic numbers iteration