我们称一个数 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)