Algorithm 合计数

Algorithm 合计数,algorithm,Algorithm,我正试图解决这个问题,但什么都想不出来 如果数字具有以下属性,我们将其命名为“聚合数字”: 就像斐波那契数一样 1,1,2,3,5,8,13 数字中的数字可以分为几个部分,后一部分是前几部分的总和 like 112358, because 1+1=2, 1+2=3, 2+3=5, 3+5=8 122436, because 12+24=36 1299111210, because 12+99=111, 99+111=210 112112224, because 112+112=224 抱歉,问

我正试图解决这个问题,但什么都想不出来

如果数字具有以下属性,我们将其命名为“聚合数字”: 就像斐波那契数一样 1,1,2,3,5,8,13

数字中的数字可以分为几个部分,后一部分是前几部分的总和

like 112358, because 1+1=2, 1+2=3, 2+3=5, 3+5=8
122436, because 12+24=36
1299111210, because 12+99=111, 99+111=210
112112224, because 112+112=224
抱歉,问题不完整,我们需要写入函数以测试数字是否聚合?
如果您有任何想法,请提供帮助

当您有前两个数字的位数时,您就有了检查聚合数字所需的一切。您只需为前两个数字生成所有有效的数字组合。数字之和不应大于所有数字的一半,因为否则第三个数字,即前两个数字的和,将不适合聚合数字的剩余部分。生成所有数字组合的最佳方法是此嵌套循环:

for (int both_digits = 2; both_digits * 2 <= total_digits; both_digits++)
{
  for (int first_digit = 1; first_digit < both_digits; first_digit++)
  {
    int second_digit = both_digits - first_digit;

    if (CheckAggregateNumber(aggregate_number, first_digit, second_digit))
      return true;
  }
}

如果你陷入困境,试着把问题分解成更简单的可解决的部分。例如,要让您开始:

/**
 * Returns true if the provided number is an aggregated number
 *
 * @param potentialAggregatedNumber The number to check.
 */
boolean isAggregated (potentialAggregatedNumber){
    for(numDigits=1; numDigits <= (potentialAggregatedNumber.length/2); numDigits++){
        if(isAggregatedForFirstNumberLength(potentialAggregatedNumber, numDigits) {
            return true;
        }
    }
    return false;
}

/**
  * Returns true if aggregated number when the first number has numDigits digits.
  *
  * @param potentialAggregatedNumber The number to check.
  * @param numDigits The number of digits the first sub-number should have.
  */
boolean isAggregatedForFirstNumberLength(potentialAggregatedNumber, numDigits){
    //your code 
}
/**
*如果提供的数字是聚合数字,则返回true
*
*@param potentialAggregatedNumber要检查的号码。
*/
布尔值已聚合(潜在聚合数){

对于(numDigits=1;numDigits你能把你的问题表述为一个问题吗?很难按原样回答。这里没有问题,好吧,你试过什么?我认为是运行两个循环,然后检查每个可能是下一个字符的潜在和的子字符串……这没有多大帮助。被3除是错误的。@Dialogicus:成为一个“聚合数”,它必须至少有3个部分:两个数字相加,一个作为总和。我假设第二个数字的值等于或更大,但我猜是“11011”"根据他的定义,现在我想它可能是一个聚合数。我已经修改以反映这一点。@Dialogicus:另外,我的目的是给他指出正确的方向,而不是给他完整的答案。
是为FirstNumberLength聚合的。
肯定是一个比
是聚合的
更简单的函数,所以如果他继续通过定义越来越简单的函数的需求,Sree最终将实现一个有效的算法。Go Sree!:)
/**
 * Returns true if the provided number is an aggregated number
 *
 * @param potentialAggregatedNumber The number to check.
 */
boolean isAggregated (potentialAggregatedNumber){
    for(numDigits=1; numDigits <= (potentialAggregatedNumber.length/2); numDigits++){
        if(isAggregatedForFirstNumberLength(potentialAggregatedNumber, numDigits) {
            return true;
        }
    }
    return false;
}

/**
  * Returns true if aggregated number when the first number has numDigits digits.
  *
  * @param potentialAggregatedNumber The number to check.
  * @param numDigits The number of digits the first sub-number should have.
  */
boolean isAggregatedForFirstNumberLength(potentialAggregatedNumber, numDigits){
    //your code 
}