首页 > 试题广场 >

CCNumber

[编程题]CCNumber
  • 热度指数:864 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
CC最近对一种整数比较感兴趣,我们暂且把这种整数称为C Number, C Number是指一个整数  {C0, C1 … Cn-1} (C0 > 0 , n >= 3), 存在一个Cm(0<m<n-1)满足以下条件:
    Ci-1 < Ci (0<i<=m), Ci代表这个整数中的第i位数字
    Ci>Ci+1(m<=i<n-1)
    如果一个整数里面有相邻的2个C Number的话,我们称这个整数为CC Number(2个C Number不可以有公用的数字Ci,并且2个C Number要紧紧相邻)。
    请在[A,B]区间内找出找出score最大的CCNumber 并输出这个score.(score:CC Number中所有数字的和)

输入描述:
第一行为数字N(N<=1000),后面有N行测试用例
每行用例有2个数字 A,B(0<=A<=B<2^64),需要[A,B]区间内找出题干中描述的最大score。


输出描述:
对于第N行的测试用例,输出“Case N: S”, S为最大的score,如果区间内没有CC Number的话 S为0。
示例1

输入

4
12121 12121
120010 120010
121121 121121
1211121 1211121

输出

Case 1: 0
Case 2: 0
Case 3: 8
Case 4: 0
n = int(input())
for k in range(n):
    maxscore=0
    start, end = map(int, input().split())
    for num in range(start, end+1):
        i=0
        num=str(num)
        while i<=len(num)-6:
            if num[i]=='0' or num[i+3]=='0':
                pass
            elif num[i]<num[i+1] and num[i+1]>num[i+2]:
                if num[i+3]<num[i+4] and num[i+4]>num[i+5]:
                    s=0
                    for j in range(0,6):
                        s+=int(num[i+j])
                    maxscore=max(s,maxscore)
            i+=1
    shuchu="Case "+str(k+1)+": "+str(maxscore)
    print(shuchu)

有没有大佬来收了这道题,有的话记得@我一下。。。只能通过20%,时间复杂度过高
发表于 2019-09-10 16:33:49 回复(0)