首页 > 试题广场 >

幸运数

[编程题]幸运数
  • 热度指数:23994 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小明同学学习了不同的进制之后,拿起了一些数字做起了游戏。小明同学知道,在日常生活中我们最常用的是十进制数,而在计算机中,二进制数也很常用。现在对于一个数字x,小明同学定义出了两个函数 f(x) 和 g(x) 。 f(x) 表示把x这个数用十进制写出后各个数位上的数字之和。如f(123)=1+2+3=6 。 g(x) 表示把x这个数用二进制写出后各个数位上的数字之和。如 123 的二进制表示为 1111011 ,那么,g(123)=1+1+1+1+0+1+1=6 。 小明同学发现对于一些正整数 x 满足 f(x)=g(x) ,他把这种数称为幸运数,现在他想知道,大于0且小于等于n的幸运数有多少个?

数据范围:

输入描述:
每组数据输入一个数


输出描述:
每组数据输出一行,小于等于n的幸运数个数。
示例1

输入

21

输出

3
def f(x):
    x=str(x)
    sum=0  for i in range(len(x)):
        sum+=int(x[i]) return sum def g(x):
    x=str(bin(x))
    sum = 0  for i in range(2,len(x)):
        sum += int(x[i]) return sum
n=input()
n=int(n)
c=0 for i in range(1,n+1): if f(i)==g(i):
        c+=1 print(c)
发表于 2019-01-01 20:14:24 回复(0)
python解法
运行时间:567ms
占用内存:3568k
n = int(input().strip())
ans = 0
for number in range(1, n+1):
    x, fx = number, 0
    while x > 0:
        fx += x%10
        x = int(x/10)
    x, gx = number, 0
    while x > 0:
        gx += (1&x)
        x = x>>1
    if fx == gx:
        ans += 1
print(ans)

发表于 2018-09-04 15:14:15 回复(0)
a=str(input())
count=0
def f(a):
    a=str(a)
    sum=0
    for t in a:
        sum=sum+int(t)
    return sum
def g(a):
    a=int(a)
    b1=0
    b2=0
    b3=0
    b4=0
    b5=0
    b6=0
    b7=0
    b8=0
    b9=0
    b10=0
    b11=0
    b12=0
    b13=0
    b14=0
    b15=0
    b16=0
    b17=0
    if a>0:
        b1=a%2
        if a>=2:
            b2=a//2%2
            if a>=4:
                b3=a//4%2
                if a>=8:
                    b4=a//8%2
                    if a>=16:
                        b5=a//16%2
                        if a>=32:
                            b6=a//32%2
                            if a>=64:
                                b7=a//64%2
                                if a>=128:
                                    b8=a//128%2
                                    if a>=256:
                                        b9=a//256%2
                                        if a>=512:
                                            b10=a//512%2
                                            if a>=1024:
                                                b11=a//1024%2
                                                if a>=2048:
                                                    b12=a//2048%2
                                                    if a>=4096:
                                                        b13=a//4096%2
                                                        if a>=8192:
                                                            b14=a//8192%2
                                                            if a>=16384:
                                                                b15=a//16384%2
                                                                if a>=32768:
                                                                    b16=a//32768%2
                                                                    if a>=65536:
                                                                        b17=a//65536%2
    return b1+b2+b3+b4+b5+b6+b7+b8+b9+b10+b11+b12+b13+b14+b15+b16+b17

for i in range(1,int(a)+1):
    sum1=f(i)
    sum2=g(i)
    if sum1==sum2:
        count+=1
print(count)

发表于 2018-08-15 16:21:32 回复(1)
 x=int(input())
def f(n):
    r=0
    while n:
        r+=n%10
        n=n//10
    return r

def g(n):
    return bin(n).count('1')*1

count=0
for i in range(1,x+1):
    if f(i)==g(i):
        count+=1
print(count)

发表于 2018-08-12 16:25:41 回复(0)
 print(len([i for i in range(1,int(input())+1) if sum([int(i) for i in list(str(i))]) == sum([int(i) for i in list(str(bin(i)))[2:]])])) 
发表于 2018-08-06 10:37:57 回复(0)
def mytest(n):
    i=0
    for k in range(1,n+1):
        g=sum(map(int,list(bin(k)[2:])))
        f=sum(map(int,list(str(k))))
        if g == f:
            i+=1
    return i
s=int(input())
print(mytest(s))
发表于 2018-07-26 10:55:25 回复(0)
def decimal(n):
    x=[int(x) for x in str(n)]
    s=sum(x)
    return s
def binary(n):
    x=[x for x in str(bin(n))]
    x=x[2:]
    y=[int(x) for x in x]
    s=sum(y)
    return s

n=int(input())
count=0
for i in range(1,n+1):
    if decimal(i)==binary(i):
        count+=1
print(count)


发表于 2018-05-22 21:36:40 回复(0)
n=int(input())

def f(x):
    return sum(list(map(int,str(x))))

def g(x):
    return sum(list(map(int,bin(x).lstrip('0b'))))

ans=0
for i in range(1,n+1):
    if f(i)==g(i):
        ans+=1
print(ans)

发表于 2018-04-28 11:20:53 回复(0)

一行

print(sum([sum(map(int, list(bin(i).replace("0b", ""))))==sum(map(int, list(str(i)))) for i in range(1, int(input()) + 1)]))

等价于:

res = 0
for i in range(1, int(input()) + 1):
    binVal = sum(map(int, list(bin(i).replace("0b", ""))))
    decimalVal = sum(map(int, list(str(i))))
    if decimalVal == binVal:
        res += 1
print(res)
编辑于 2018-11-23 06:53:48 回复(4)

n = input ()
def f(s):
    ans = 0
    for i in s :
        if i=='b':
            pass
        else:
            ans += int(i)
    return ans

res=0
for i in range(1,int(n)+1):
    if f(bin(i)) == f(str(i)):
        res += 1
print(res)
发表于 2018-03-26 15:45:45 回复(0)
userinput = int(input())
match=0
for example in range(1,userinput+1):
    temp=example
    holders=[]
    firstresult = 0
    secondresult = 0
    counter=0
    
    while(temp>0):
        holders.append(temp%10)
        temp=temp//10
    while(counter<len(holders)):
        firstresult = firstresult+holders[counter]
        counter+=1
    holders.clear()
    
    binaryrepresentation = bin(example)
    secondresult = binaryrepresentation.count('1')
    if(firstresult == secondresult):
        match+=1
print(match)

发表于 2018-01-25 00:53:24 回复(0)
def isLuckyNum(x):
    tem = [int(i) for i in str(x)]
    two = [int(j) for j in str(bin(x)).replace("0b", "")]
    if sum(tem) == sum(two):
        return True
    else:
        return False
result_list = [x for x in range(1,int(input()) + 1) if isLuckyNum(x)]
print(len(result_list))

发表于 2017-11-06 22:04:44 回复(0)
def jinzhi(m,n):
    sum=0
    while(m):
        sum+=(m%n)
        m=m//n
    return sum
    
def fun(N):
    sum=0
    for i in range(1,N+1):
        a=jinzhi(i,2)
        b=jinzhi(i,10)
        if a==b:
            sum+=1
    return sum
N=int(input(''))
print(fun(N))

发表于 2017-09-17 16:51:35 回复(0)