bobby


私信TA

用户名:yuncker

访问量:7292

签 名:

等  级
排  名 1564
经  验 2780
参赛次数 0
文章发表 23
年  龄 24
在职情况 学生
学  校 华东交通大学
专  业 软件

  自我简介:

解题思路:借用了@小哈哈这位兄弟的题解:

题目中说“bdfij”与“bdghi”是依次的Jam数字,意思就是两个数相邻
只是bdfij < bdghi 然而我们要知道为什么 bdfij < bdghi其实只是对bdfij这个数从第五位开始递增来推的,因为第五位的j如果加1本来应该等于k的,但是k不在{b,c,d,e,f,g,h,i,j}这个范围内,所以要从第四位的 i 来看,但是如果 i 增加1就是 j 了,就等于第五位的 j 了,所以第四位也不能加1,那么我们来看第三位的 f ,因为f加一等于 g而 g在{b,c,d,e,f,g,h,i,j}这个范围内,而且它也不大于第四位的 i,所以我们在第三位做加一操作,把 f 变成 g ,然后我们再回到第四位 让 i做减一操作,因为i减一变成h,如果它又减一就会变成g,这时候它就没有比第三位大了,所以它不能减两次一,只能减一次一,从而变成 h,接下来我们再看第五位,如果j减一的话,变成i,没有比第四位小,如果再减一呢,显然等于第四位的h了,所以它也不能减两次一它只能减一次一,变成i(总结一下,就是从后往前判断,先判断最后一个数字加1超单纯拿数字举例,比如12367,然后范围是(1~7) ,加1看看满足不超过范围且比后面的数字小这个条件,7+1超过了7,不行,然后看6,6+1等于7,不小于后面这一位的7,也不行,再看3,3+1=4,满足条件,所以3变成4,也就是12467,然后确定了4,因为是求当前数字的下一个,所以要求最小(注意是递增),所以4后面的数字依次加1就行了,也就是变成12456)
注意事项:

参考代码:

s,t,w=map(int,input().split())
#确定字母的范围
le=[chr(i) for i in range(ord('a'),ord('a')+26)][s-1:t]
letter=input().strip()
#记录输出的次数
cnt=0
#Max存储的是最大字母的ASCII码
Max=ord(le[-1])
#如果字符串长度是w就进入while循环
while len(letter)==w:
    #不能超过五次输出
    if cnt==5:
        break
     #如果字符串倒数第一位的值加1在范围内
    if ord(letter[w-1])+1<=Max:
        #最后一位直接加1输出
        letter=letter[:w-1]+chr(ord(letter[w-1])+1)
        print(letter)
        cnt+=1
        continue
     #从倒数第二个开始判断
    for i in range(w-2,-1,-1):
        #如果当前字符串对应的值+1没有超过范围(我这里的范围就是说这个字母的ASCII码值+1没有超过最大的字母的ASCII值),并且小于后面一位的值
        if ord(letter[i])+1<= t+ord('a')-1 and ord(letter[i])+1<ord(letter[i+1]):
                #先取前i位的字母(下标为0到i-1)
            temp=letter[:i]
            #第i位直接加1
            temp_i=chr(ord(letter[i])+1)
            #第i到第w位依次加递增(比如12367,第三位是3,上面一步temp_i则变成3+1=4,这时temp=12,后面循环temp依次变为:124,1245,12456)
            for j in range(w-i):
                temp+=chr(ord(temp_i)+j)
            #将temp赋值给letter
            letter=temp
            print(letter)
            #次数加1
            cnt+=1
            break
        else:    #如果等于i=0,且没有执行前面的break,说明没有位置满足条件,也就是说没有这样的数字了
            if i==0:
                    #len(letter)=0,从而终止了while循环
                letter=''
                break


 

0.0分

1 人评分

  评论区

  • «
  • »