我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。
如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。
现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?
我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。
如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。
现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?
输入正整数N
输出1到N中好数个数
10
4
在[1, 10]中有四个好数: 2, 5, 6, 9。
注意 1 和 10 不是好数, 因为他们在旋转之后不变。
import sys
para = []
for line in sys.stdin:
para = line.split()
n = int(para[0])
goodNumber = [0, 1, 2, 5, 6, 8, 9]
d = {}
def isGood(t):
s = ""
x = t
while x:
last_bit = x % 10
if last_bit not in goodNumber:
return False
if last_bit == 2:
last_bit = 5
elif last_bit == 5:
last_bit = 2
elif last_bit == 6:
last_bit = 9
elif last_bit == 9:
last_bit = 6
s = str(last_bit) + s
x //= 10
d[t] = int(s)
return True
def func(n):
count = 0
l = [i for i in range(1, n + 1)]
for i in l:
if isGood(i):
if d[i] != i:
count += 1
return count
print(func(n)) import sys n=int(sys.stdin.readline().strip()) sub0=['2','5','6','9'] sub1=['0','1','8'] num=0 for i in range(1,n+1): res=[] for j in str(i): if j in sub0: res.append(0) if j in sub1: res.append(1) if len(res)==len(str(i)) and list(set(res))==[0,1]: num+=1 if len(res)==len(str(i)) and list(set(res))==[0]: num+=1 print(num)
arr1 = [2, 5, 6, 9] arr2 = [3, 4, 7] n = int(input()) def cal(n): res = [] while n != 0: res.append(n % 10) n = n // 10 return res def judge(res): flag = 0 for item in res: if item in arr2: return False break elif item in arr1: flag = 1 if flag == 1: return True cnt = 0 for i in range(1, n+1): if judge(cal(i)): cnt += 1 print(cnt)
""" 暴力枚举,判断是不是好数 """ def is_good(s): if '3' in s or '4' in s or '7' in s: return False if '2' in s or '5' in s or '6' in s or '9' in s: return True return False if __name__ == "__main__": N = int(input().strip()) ans = 0 for i in range(1, N + 1): if is_good(str(i)): ans += 1 print(ans)