如果数字 x 的任何两个连续数字之和在 k 和 2k 之间,则给定数字 x 是“好”的。我需要找到一种算法,对于给定的数字 k 和给定的数字 n,找出存在多少“好”的 n 位数字。
我在 PHP 中对此做了一个实现,但是复杂度很大(我正在搜索所有那些“好”的数字并计算它们,所以复杂度是 O(10^n))。
<?php
$n = 5;
$k = 5;
$min = $k*1;
$max = $k*2;
$counter = 0;
for ($i = pow(10, $n-1); $i<pow(10,$n); $i++)
{
$number = $i;
$prev = $number % 10;
$number = $number / 10;
while($number >= 10)
{
$crnt = $number % 10;
$number = $number / 10;
if ( ($crnt+$prev) > $min AND ($crnt+$prev) < $max ) {
echo "good number: $i\n";
$counter++;
}
$prev = $crnt;
}
}
echo "counter: ".$counter."\n";
?>
有人可以确认我是否可以解决此问题:
n=100 // given
k=10 // given
counter = 0;
for(i=10; i<100; i++)
{
if( (i/10)+(i%10) > k ) && ( (i/10)+(i%10) < 2*k )
counter++;
}
total = counter^(n-1)