计算给定范围内重复数字的数字

时间:2017-04-06 18:36:02

标签: algorithm numbers

如何在不使用模数函数的情况下找到具有重复数字的数字(例如:11,101,15231:都具有重复的1)。范围应该是用户定义的。有一些使用组合的解决方案但是对于预定范围是主观的。如果范围为52和156,那么如何以最佳方式找到解决方案。

2 个答案:

答案 0 :(得分:0)

假设你有一组数字。

设A是维|| S ||的矩阵x 10。

int row = 0
for each n in S:
    let exp = log10(n)
    for(int i = exp; i >= 0; i--){
        let division = n / pow(10, exp)
        A[row][ division ] = 1
        n -= division * pow(10, exp)
    }
    row++
}

使用此伪代码,您可以获得所有数字中存在的所有数字,而不是只需要检查所有数字是否都有一些共同数字:

void check(matrix A){
    for(int i = 0; i < A.columns; i++){
        boolean all_equal = true
        for(int j = 0; j < A.rows; j++){
            if(A[i][j] != 1) all_equal = false
        }
        if(all_equal) print("all numbers have " + i + " digit in common")
    }
}

希望有所帮助:)

我猜你已经考虑过将数字变成字符串的可能性,所以这个解决方案不包括字符串

答案 1 :(得分:0)

不是试图找出具有重复数字的数字的数量,而是很容易计算每个位置中具有唯一数字的数字的数量,并从可能的所有数字中减去它以获得实际结果。

# of numbers with repeating digits(R) = all possible numbers(A) - # of numbers with unique digits in each position(X)

现在,要计算某个范围[L,R]内的XA,我们可以先从0计算到R并减去0 } L - 1

ans[L, R] = ans[0, R] - ans[0, L - 1]

我现在不提供代码示例。只需为您的想法添加一些食物,请告诉我您需要更多解释的地方。