首页 > 试题广场 >

小乐乐与二段数

[编程题]小乐乐与二段数
  • 热度指数:8046 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

小乐乐从老师口中听到了二段数这个名词,想更深入的了解二段数。

二段数是这样的正整数:恰好包含两种不同的十进制数字sts不是0,并且s的所有出现均排列在所有的t的前面。例如,44444411是二段数(s4t1),41100000005555556也是。但444411444444都不是二段数。

这时老师问小乐乐:给你一个任意的正整数n,你能求出比n大并且是n的倍数的最小二段数吗?请你帮助小乐乐解答这个问题。


输入描述:
多组输入,每组输入包含一个正整数n (1 ≤ n ≤ 99999)

题目保证测试数据总数不超过500组,当输入n=0时程序结束。


输出描述:
对于每组测试用例,输出正整数n,后面紧跟“: ”,输出答案并换行,即比n大且是n的倍数的最小二段数。
示例1

输入

1
2019
0

输出

1: 10
2019: 9999999993
题目有问题,基本上我想不出不遍历的解法,但一遍历就超时,这个解法自测是可用的,当然放上去就是超时
while True:
    try:
        list=int(input())
        if list!=0:
            for n in range(2,10000):
                test=n*list
                str_test=str(test)
                s=str_test[0:1]
                t=str_test[-1:]
                if s==t&nbs***bsp;s==0:
                    continue
                set_test=set()
                for letter in str_test:
                    set_test.add(letter)
                if len(set_test)==2:
                    list_test=[]
                    flag=True
                    st=s+t
                    cnt=str_test.count(st)
                    if cnt>1:
                        flag=False
                    if flag==True:
                        print("{}:{}".format(list,test))
                        break
        else:
            break
    except:
        break

发表于 2022-03-12 14:36:52 回复(0)
超时了。。。
while True:
    n=int(input())
    if(n==0):
        break
    flag=0
    if n<=50:
        for i in range(2,100):
            num=n*i
            if num>=10:
                print("%d: %d"%(n,num))
                break
    else:
        for w in range(len(str(n*2)),100):
            if flag:
                break
            for i in range(1,10):
                if flag:
                    break
                for j in range(0,10):
                    if flag:
                        break
                    if i!=j:
                        for ws in range(1,w):
                            s=[]
                            for aw in range(0,ws):
                                s.append(i)
                            for bw in range(0,w-ws):
                                s.append(j)
                            num=int("".join(map(str,s)))
                            if (num%n==0)&(num>n):
                                print("%d: %d"%(n,num))
                                flag=1
                                break

发表于 2022-02-21 09:12:24 回复(0)
def f(n):
    n = str(n)
    l = list(set(n))
    if len(l) == 2:
        count = 0
        a = n[0]
        for i in n:
            if i != a:
                a = i
                count += 1
        if count != 1:
            return True
        else:
            return False
    else:
        return True

while True:
    a = int(input())
    if a == 0:
        break
    n = 2*a
    i = 2
    while f(n):
        i += 1
        n = a*i
    print('%d:%d' %(a,n))
超时。。。
发表于 2021-11-03 20:54:14 回复(0)

问题信息

上传者:牛客309119号
难度:
5条回答 5874浏览

热门推荐

通过挑战的用户

查看代码
小乐乐与二段数