首页 > 试题广场 >

X游戏

[编程题]X游戏
  • 热度指数:6399 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。

如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。

现在我们有一个正整数 N, 计算从 1 到 N 中有多少个数 X 是好数?


输入描述:
输入正整数N


输出描述:
输出1到N中好数个数
示例1

输入

10

输出

4

说明

在[1, 10]中有四个好数: 2, 5, 6, 9。
注意 1 和 10 不是好数, 因为他们在旋转之后不变。
convDict = {'0':'0','1':'1','2':'5','5':'2','6':'9','8':'8','9':'6'}
def convert(str1):
    s = ''
    for i in str1:
        if i not in convDict.keys():
            return -1
        else:
            s+=convDict[i]
    return -1 if s==str1 else 1

if __name__=="__main__":
    n = int(input())
    count = 0
    for i in range(n):
        if convert(str(i+1))==1:
            count+=1
    print(count)
发表于 2020-03-07 17:41:36 回复(0)
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))

发表于 2019-09-16 23:28:14 回复(0)
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)

发表于 2019-09-14 16:21:26 回复(0)
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)

发表于 2019-09-11 20:01:34 回复(0)
N = int(input())
counter = 0
for i in range(1, N+1):
    i = str(i)
    if "3" in i or "4" in i or "7" in i:
        continue
    elif "2" in i or "5" in i or "6" in i or "9" in i:
        counter += 1
    else:
        continue
print(counter)

发表于 2019-08-26 22:12:15 回复(0)
def count(n):
    num = 0
    for i in range(1, n+1):
        set_i = set(str(i))
        if set(['2','5','6','9']) & set_i and not set(['3','4','7'])&set_i:
            num += 1
    return num
n = int(input())
print(count(n))
发表于 2019-08-24 09:50:01 回复(0)
def f(n):
    dp = [0] * (n+1)
    dp[0] = 0
    dp[1] = 0
    if n<=1:
        return 0
    else:
        index = 2
        while True:
            if '3' in str(index) or '4' in str(index) or '7' in str(index):
                dp[index] = dp[index-1]
            elif '2' in str(index) or '5' in str(index) or '6' in str(index) or '9' in str(index):
                dp[index] = dp[index-1]+1
            else:
                dp[index] = dp[index-1]
            if index == n:
                return dp[index]
            else:
                index+=1
n = int(input())
print(f(n))
发表于 2019-08-15 00:13:58 回复(0)
"""
暴力枚举,判断是不是好数
"""
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)

编辑于 2019-07-10 17:03:13 回复(0)