给定一个蒙版数字,计算所有可能被n整除的数字

时间:2017-11-29 08:04:33

标签: math dynamic-programming integer-division

我有一个动态编程练习,但我不知道它将如何在这里工作:

我们有一个神秘的数字是一个由数字和星号组成的字符串*。 给定一个神秘的数字,计算所有可能的自然数,用数字替换星号*,以产生可被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 ++语言。正如我所说,这是一个动态的编程练习。

有人能给我一些暗示吗?

1 个答案:

答案 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)