我有一个动态编程练习,但我不知道它将如何在这里工作:
我们有一个神秘的数字是一个由数字和星号组成的字符串*。 给定一个神秘的数字,计算所有可能的自然数,用数字替换星号*,以产生可被n整除的整数。 例如:
对于1 * 1 *和n = 6,有16个可能被n整除的数字:1014, 1110, 1116, 1212, 1218, 1314 1410, 1416, 1512, 1518, 1614年, 1710, 1716, 1812年, 1818年, 1914。
如果有一个前导星号,那么它永远不应该被零替换:
* 12 - > 112(没关系)但* 12 - > 012(不合适)
输入:
1< = inputString.size< = 1000
1< = n< = 1000
时间限制:
500毫秒的C ++语言。正如我所说,这是一个动态的编程练习。
有人能给我一些暗示吗?
答案 0 :(得分:1)
我为你写了一个JavaScript,你可以把它改成c ++, 也请你留言。它使用Recursive来处理和替换左边的每个*并用可能的数字替换它
var string ="示例mystriuos编号"
function Func(mysNumber , n )
{
// this function
var realnumber = true // a check if number is not mystrius anymore!!
for (var i=0 ; i<= mysNumber.length ; i++)
{
if(i !=0 && mysNumber[i]=="*") // for Not left number
{
realnumber= false
for(var j=0 ; j<=9 ;j++ )
{
Func(mysNumber.substring(0,i) + j.toString() + mysNumber.substring(i+1,mysNumber.length) ,n)
}
}
else if (mysNumber[i]=="*") // for left number
{
realnumber = false
for(var j=1 ; j<=9 ;j++ )
{
Func(mysNumber.substring(0,i) + j.toString() + mysNumber.substring(i+1,mysNumber.length) ,n)
}
}
}
if(realnumber)
if(parseInt(mysNumber) % n ==0)
print(mysNumber)
}
func(string , 6)