鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] Python:每日一题 174

[复制链接]
发表于 2018-4-6 23:45:03 | 显示全部楼层
  1. def fun(n):
  2.     a = 1
  3.     b = 1
  4.     for i in range(n):
  5.         a, b = b, a+b        
  6.     return a


  7. def main():
  8.     i = 1
  9.     j = 0
  10.     nums = ''
  11.     flag = 0
  12.     while flag != 1:
  13.         funs = str(fun(i))
  14.         for each in funs:
  15.             if each not in nums:
  16.                 nums += each
  17.             else:
  18.                
  19.                 nums = ''
  20.                 i = j
  21.                 j += 1
  22.         i += 1
  23.         temp = ''.join(sorted(nums)) == '0123456789':
  24.             print(nums)
  25.             flag = 1
  26.         
  27. if __name__ == '__main__':
  28.     main()
复制代码


好像没找到符合的数。是不是我理解错题目了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 05:49:29 | 显示全部楼层
#创建函数,生成第n项斐波那契数
def Fib(n):
    if n==1 or n==2:
        return 1
    else:
        return Fib(n-1)+Fib(n-2)
#创建函数,将前n项项斐波那契数合并成一个字符串
def Fibs(n):
    list_Fib=[]
    for i in range(1,n+1):
        list_Fib.append(str(Fib(i)))
    return ''.join(list_Fib)
m=8
#从第8项开始,前n项自然数个数大于10
flag=1
while flag:
    for i in range(len(Fibs(m))-9):
        fibs=Fibs(m)[i:i+10]
        a=[int(i) for i in fibs]
        b=[i for i in range(10)]
        if sorted(a)==b:
#判断合成的字符串里有没有0~10
            print(fibs)
            flag=0
            break
        else:
            print(Fibs(m))
            m=m+1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 09:05:53 | 显示全部楼层
本帖最后由 AlexEdwars 于 2018-4-7 18:45 编辑
  1. fib_start = 1
  2. fib_end = 1

  3. while True:
  4.     data = ''
  5.     for i in range(10):
  6.         data += str(fib_start)
  7.         fib_end, fib_start = (fib_end + fib_start), fib_end
  8.     for i in range(10):
  9.         if str(i) in data:
  10.            pass
  11.         else:
  12.             break
  13.     else:
  14.         print(data)
  15.         print()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 15:22:57 | 显示全部楼层
  1. a, b = 0, 1
  2. s = '1'
  3. while s:
  4.     a, b = b, a + b
  5.     s += str(b)
  6.     for i in range(len(s)):
  7.         if len(set(s[i :i+10])) == 10:
  8.             print(s[i :i+10])
  9.             s = ''
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 19:53:32 | 显示全部楼层
本帖最后由 lxchace 于 2018-4-7 20:04 编辑
  1. #funny Fibonacci

  2. def fibs():
  3.     a,b = 0,1
  4.     while True:
  5.         a,b = b,a+b
  6.         #print(a)
  7.         yield a
  8.     return

  9. def include10(s):
  10.     for i in range(10):
  11.         if s.find(str(i))==-1:
  12.             return False
  13.     return True

  14. def findnums():
  15.     Fibs=fibs()
  16.     fibs_str=''
  17.     i=0
  18.     while len(fibs_str)<10:
  19.         fibs_str+=str(next(Fibs))
  20.     while True:
  21.         if include10(fibs_str[i:(i+10)]):
  22.             break
  23.         i+=1
  24.         if len(fibs_str)-i<10:
  25.             fibs_str+=str(next(Fibs))
  26.     print(fibs_str[i:(i+10)])
  27.     return
  28.         
  29. def main():
  30.     findnums()
  31.     return

  32. if __name__ == "__main__":
  33.     main()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 20:31:43 | 显示全部楼层
达锅 发表于 2018-4-5 21:38
def findDigits():
    m,n,txt=1,1,"11"#mn分别是数列前后项
    while len(set(txt[:10]))!=10:#每次 ...

好厉害,都没想过用几何元素的互异性来判断是否符合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 20:36:40 | 显示全部楼层
  1. def KO(s):
  2.         for i in range(10):
  3.                 if str(i) not in s:
  4.                         return False
  5.         return True
  6. 为什么代码的空格会不对的

  7. n = 10
  8. b = True
  9. # 为了提高效率,这里不用FB产生数列的项,而是用前面的产生后面的项
  10. a1 = 1
  11. a2 = 1

  12. strfb = "11"
  13. for i in range(1, 5):
  14.                 a1, a2 = a2, a1 + a2
  15.                 strfb = strfb + str(a2)

  16. while b:
  17.         for i in range(len(strfb)-9):
  18.                 if KO(strfb[i:i+10]):
  19.                         print(strfb[i:i+10])
  20.                         print("在", a2, "里找到的,是第", n, "项")
  21.                         b = False
  22.                         break
  23.         if b:
  24.                 n += 1
  25.                 a1, a2 = a2, a1 + a2
  26.                 strfb = strfb[-9:] + str(a2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 21:13:09 | 显示全部楼层

老哥这个代码写的很有趣哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 21:25:09 | 显示全部楼层

日了,手抖多加了一项= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 22:41:38 | 显示全部楼层
a,b,i,j=0,1,0,0
l=''

while  i<=1000:
    a,b=b,a+b
    l+=str(a)
    i+=1
for j in range(len(l)):
    if len(set(l[j:j+10]))==10:
        print(l[j:j+10])

   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-8 13:32:13 | 显示全部楼层
来晚了,写了个,有点复杂……

  1. def fib_itr(n):
  2.     if n < 0:
  3.         return None
  4.     if n <= 1:
  5.         return (0, 1)[n]
  6.     a, b = 0, 1
  7.     for i in range(n-1):
  8.         a, b = b, a+b
  9.     return b

  10. def judge(str1):
  11.     num = [list(str1).count(str(s)) for s in range(10)]
  12.     return True if num.count(1) == 10 else False


  13. str1 = ''
  14. n = 1
  15. while len(str1) < 10:
  16.     str1 += str(fib_itr(n))
  17.     n += 1

  18. while n < 1000:
  19.     l = len(str1)
  20.     str1 += str(fib_itr(n))
  21.     n += 1
  22.     for i in range(len(str(fib_itr(n-1)))):
  23.         if judge(str1[l-10+i+1:l+i+1]):
  24.             print(str1[l-10+i+1:l+i+1])
  25.             break
复制代码


结果:
9034621587
5037496128
4538679120
0685291437
1307952468
0625379814
3495718260
4872635019
8094635172
9051628347
0235879461
8350479216
1548620397
9530278614
2083746915
9812437560
2641803975
3450921867
8374291560
3912754068
4785690312
7392561840
4510687932
9061852743
0875496123
7245190386
4158302967
6457130298
7456930182
0529186743
6084251379
4165238709
4029157638
0983571624
1947268035
6280794315
5647928031
0147296835
6480123579
3481926075
1095837246
4028135679
5386701924
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-8 14:50:06 | 显示全部楼层
  1. num=int(input('请输入一个整数:'))
  2. def fib(n):
  3.     a = 1
  4.     b = 0
  5.     string = ''
  6.     for i in range(n):
  7.         a ,b = b,a+b
  8.         string += str(b)

  9.     return string

  10. string = fib(num)

  11. length = len(string)

  12. for i in range(length):
  13.     if len(set(string[i:i+10])) == 10:
  14.         print(string[i:i+10])
  15.         break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-8 16:32:10 | 显示全部楼层
  1. def haspan(s):   #判断字符串s是否含用全字符
  2.     if len(s)<10:
  3.         return '0'
  4.     for i in range(len(s)-10):
  5.         if ''.join(sorted(s[i:i+10]))=='0123456789':
  6.             return s[i:i+10]
  7.     return '0'

  8. a,b,s=1,1,'1'
  9. while True:
  10.     a,b=b,a+b
  11.     s+=str(a)
  12.     t=haspan(s)
  13.     if t!='0':
  14.         break
  15. print(t)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-9 11:41:54 | 显示全部楼层
def Fib():
    a,b = 0,1
    while True:
        a,b=b,a+b
        yield a
string,flag,f = '',1,Fib()
while flag:
    if len(set(string))!=10:
        string=string+str(next(f))
        string=string[-11:-1]
    else:
        print(string)
        flag=0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-9 15:40:35 | 显示全部楼层
def fib(n):
        s = ''
        a = 0
        b = 1
        for i in range(n):
                a,b = b,a+b
                s += str(a)
        return s

n = 0
while True:
        check = fib(999)[n:n+10]
#        if check == '9034621587':
        #print(check)
        for each in check:
                if check.count(each) != 1:
                        n += 1
                        break
        else:
                print(n,(n+10),check)
                n += 1
                if n > 3000:
                        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-12 20:12:32 | 显示全部楼层
import random

def feibonaqie():
    a = [random.randint(1,100)]
    b = 0
    while True:
        if len(a) == 1:
            b += a[0]
            a.append(b)
            continue
        b = a[len(a)-2]+a[len(a)-1]
        a.append(b)
        if len(a) == 100:
            feibo = ''.join('%s'%number for number in a)
            return feibo
            break
answer = []
for i in feibonaqie():
    if int(i) == 2 or int(i) == 1 or int(i) == 3 or int(i) == 5 or int(i) == 8:
        answer.append(i)
        feibo = ''.join('%s'%number for number in answer)
        if len(answer) == 10:
            break
print(feibo)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-14 16:45:08 | 显示全部楼层
  1. a= 0
  2. b =1
  3. string =''
  4. ls = []
  5. for i in range(1000):
  6.     a,b = b,a+b
  7.     string += str(a)
  8. else:
  9.     # print(string)
  10.     for j in string:
  11.         # print(j)
  12.         if j in ls:
  13.             ls = ls[ls.index(j)+1:]
  14.             ls.append(j)
  15.         else:
  16.             ls.append(j)
  17.         if len(ls) == 10:
  18.             for l in ls:
  19.                 print(l,end="")
  20.             print()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2018-8-13 16:28:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-22 18:29:05 | 显示全部楼层
本帖最后由 子沙 于 2018-8-22 18:32 编辑
  1. x1=1
  2. x2=1
  3. x3=x1+x2
  4. f=str(x1)+str(x2)+str(x3)
  5. n=3
  6. while len(f)<10:
  7.     x1=x2
  8.     x2=x3
  9.     x3=x1+x2
  10.     f+=str(x3)
  11.     n=n+1
  12. i=0
  13. m=0
  14. while m==0:
  15.     while i+9<=len(f):
  16.         if ('0'in list(f)[i:i+10]and'1'in list(f)[i:i+10]and'2'in list(f)[i:i+10]and'3'in list(f)[i:i+10]and'4'in list(f)[i:i+10]and
  17.             '5'in list(f)[i:i+10]and'6'in list(f)[i:i+10]and'7'in list(f)[i:i+10]and'8'in list(f) [i:i+10]and'9'in list(f)[i:i+10]):
  18.             print('最先出现在斐波那契数列第%d项:%d,10个数即为'%(n,x3),'',*list(f)[i:i+10])
  19.             m=1
  20.             break
  21.         i+=1
  22.     x1=x2
  23.     x2=x3
  24.     x3=x1+x2
  25.     f+=str(x3)
  26.     n=n+1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-7 09:28:53 | 显示全部楼层
  1. a = b = 1
  2. flag = False
  3. while not flag:
  4.     s = str(a) + str(b)
  5.     for i in range(len(s) - 9):        
  6.         if len(set(s[i:i + 10])) == 10:
  7.             flag = True
  8.             print(s[i:i + 10])
  9.             break
  10.     a, b = b, a + b
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表