📌  相关文章
📜  为 X 选择的值的计数,以便在给定操作后将 N 减少到 0

📅  最后修改于: 2021-10-27 06:21:17             🧑  作者: Mango

给定一个正整数N ,任务是找到整数X的数量,以便在执行以下操作序列后将N的值减少到0

  • m N 中减去 X的值
  • 如果X个位数的整数,然后停止施加动作。
  • 将 X的值更新为X 的数字总和

例子:

方法:可以使用基于以下观察的贪心方法来解决给定的问题:

  • 可以观察到,选择大于N的 X值不会将N减少到0
  • 可以肯定地说,如果N 中的位数是K ,那么 X 的任何值都不会小于(N – 10 * K * (K + 1) / 2)并且可以将N转换为0

从上面的观察来看,想法是在范围[N – 10 * K * (K + 1) / 2, N]上进行迭代,并计算该范围内在执行给定操作后可以将 N转换为0 的那些值。

下面是上述方法的实现:

Python3
# Python program for the above approach
  
# Function to check if the value of X
# reduces N to 0 or not
def check(x, N):
  
    while True:
  
        # Update the value of N as N-x
        N -= x
  
        # Check if x is a single digit integer
        if len(str(x)) == 1:
            break
  
        # Update x as sum digit of x
        x = sum(list(map(int, str(x))))
  
    if len(str(x)) == 1 and N == 0:
  
        return 1
  
    return 0
  
# Fuction to find the number of values
# X such that N can be reduced to 0
# after performing the given operations
def countNoOfsuchX(N):
  
    # Number of digits in N
    k = len(str(N))
  
    # Stores the count of value of X
    count = 0
  
    # Iterate over all possible value
    # of X
    for x in range(N - k*(k + 1)*5, N + 1):
  
        # Check if x follow the conditions
        if check(x, N):
            count += 1
  
    # Return the total count
    return count
  
  
# Driver Code
N = 9939
print(countNoOfsuchX(N))


输出:
3

时间复杂度: O(log N)
辅助空间: O(log N)