首页 > 试题广场 >

神奇数

[编程题]神奇数
  • 热度指数:3235 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
东东在一本古籍上看到有一种神奇数,如果能够将一个数的数字分成两组,其中一组数字的和等于另一组数字的和,我们就将这个数称为神奇数。例如 242 就是一个神奇数,我们能够将这个数的数字分成两组,分别是 {2,2} 以及 {4} ,而且这两组数的和都是 4 .东东现在需要统计给定区间中有多少个神奇数,即给定区间 [l, r] ,统计这个区间中有多少个神奇数,请你来帮助他。

数据范围:

输入描述:
输入包括一行,一行中两个整数l和r(1 ≤ l, r ≤ 10^9, 0 ≤ r - l ≤ 10^6),以空格分割


输出描述:
输出一个整数,即区间内的神奇数个数
示例1

输入

1 50

输出

4
示例2

输入

11 11

输出

1
#超时了
def divide(n):
    global digit
    while(n>0):
        digit.append(n % 10)
        n = n // 10
        
def isEqual(index, halfSum):
    global digit
    if(halfSum == 0):
        return True
    if((halfSum!=0 and index == len(digit)) or halfSum < 0):
        return False
    equal = (isEqual(index+1, halfSum - digit[index]) or isEqual(index+1, halfSum))
    return equal
    
global digit
ans = 0
l, r = map(int, input().split())
for num in range(l, r+1):
    digit = []
    divide(num)
    if(sum(digit) % 2 != 0 or len(digit) < 2):
        continue
    else:
        if(isEqual(0, sum(digit)//2)):
            ans += 1
print (ans)

发表于 2019-03-28 09:28:07 回复(0)