Algorithm 合计数
我正试图解决这个问题,但什么都想不出来 如果数字具有以下属性,我们将其命名为“聚合数字”: 就像斐波那契数一样 1,1,2,3,5,8,13 数字中的数字可以分为几个部分,后一部分是前几部分的总和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 抱歉,问
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
}