如何在不使用模数函数的情况下找到具有重复数字的数字(例如:11,101,15231:都具有重复的1)。范围应该是用户定义的。有一些使用组合的解决方案但是对于预定范围是主观的。如果范围为52和156,那么如何以最佳方式找到解决方案。
答案 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]内的X
和A
,我们可以先从0
计算到R
并减去0
} L - 1
。
ans[L, R] = ans[0, R] - ans[0, L - 1]
我现在不提供代码示例。只需为您的想法添加一些食物,请告诉我您需要更多解释的地方。