CCF CSP 201312-4 有趣的数 (Python)

问题描述

  我们把一个数称为有趣的,当且仅当:
  1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。
  2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。
  3. 最高位数字不为0。
  因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。
  请计算恰好有n位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以1000000007的余数。

输入格式

  输入只有一行,包括恰好一个正整数n (4 ≤ n ≤ 1000)。

输出格式

  输出只有一行,包括恰好n 位的整数中有趣的数的个数除以1000000007的余数。

样例输入

4

样例输出

3

解题:

这里用了暴力解法,结果运行超时,找时间再做修改

# 10 运行超时


a = int(input().strip())

def is_interesting_num(x):
    li = list(str(x))
    if set(li) != {'0', '1', '2', '3'}:
        return False
    else:
        for i in range(len(li)):
            if (li[i] == '1' and ('0' in li[i:])) or (li[i] == '3' and ('2' in li[i:])):
                return False
        return True

def n_interesting_num(n):
    interesting=0
    for i in range(10**(n-1)*2,10**(n-1)*3):
        if is_interesting_num(i):
            interesting+=1
    return interesting%1000000007
print(n_interesting_num(a))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值