鱼C论坛

 找回密码
 立即注册
查看: 8387|回复: 61

[技术交流] Python:每日一题87(答题领鱼币)

[复制链接]
发表于 2017-8-27 10:06:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
我们都知道斐波那契数列,它的下一个数为前两个之和,前12个如下:
1  1  2  3  5  8  13  21  34  55  89  144
下面我们稍微改变一下规则,如果算出的下一个数是偶数,则取它被2整除的值,前12个如下:
1  2  3  5  4  9  13  11  12  23  35  29
为了使数列不都为1,从1和2开始。
写出这个函数。
  1. def newfib(n)
  2.     ......
复制代码

n的取值从1开始。

我的解法:
游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-8-27 10:48:53 | 显示全部楼层
本帖最后由 chunchun2017 于 2017-8-28 09:12 编辑
  1. def newfib(n):
  2.   list0=[1,]
  3.   if n>1:
  4.     list0.append(2)
  5.     for i in range(2,n):
  6.       temp=list0[i-1]+list0[i-2]
  7.       if(temp%2==0):
  8.           temp=temp//2
  9.       list0.append(temp)
  10.   return list0
  11. n=int(input('请输入N的值:'))
  12. print(newfib(n))
复制代码

======================
运行结果:
请输入N的值:1
[1]
请输入N的值:2
[1, 2]
请输入N的值:8
[1, 2, 3, 5, 4, 9, 13, 11]

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-27 11:20:07 | 显示全部楼层
  1. def newfib(n):
  2.     a, b = 1, 2
  3.     result = []
  4.     for i in range(n):
  5.         result.append(a)
  6.         if (a+b)%2 == 0:
  7.             a, b = b, (a+b)//2
  8.         else:
  9.             a, b = b, a+b
  10.     return result
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-27 20:37:18 | 显示全部楼层
  1. def fib(cnt):
  2.     a,b=1,2
  3.     while cnt:
  4.         print(a)
  5.         a,b=b,a+b
  6.         if b%2 == 0:
  7.             b = b//2
  8.         cnt -= 1

  9. fib(12)

  10. # so easy
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-27 21:12:36 | 显示全部楼层
def fun(n):
    if n == 1 or n == 2:
        return n
    elif (fun(n-1) + fun(n-2)) % 2:
        return fun(n-1) + fun(n-2)
    else:
        return (fun(n-1) + fun(n-2)) // 2
n = int(input('shuru:'))
for x in range(n):
    print(fun(x+1), end=' ')

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-27 21:23:15 | 显示全部楼层
本帖最后由 wc365 于 2017-8-27 21:24 编辑
  1. def newfib(n):
  2.     if n ==1:
  3.         return 1
  4.     if n == 2:
  5.         return 2
  6.     else:
  7.         temp = newfib(n-1) + newfib(n-2)
  8.         if temp%2 != 0:
  9.             return temp
  10.         else:
  11.             return temp//2

  12. str1 = []
  13. n = int(input("请输入一个自然数:"))
  14. for i in range(n):
  15.     str1.append(newfib(i+1))
  16. print(str1)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-27 22:05:24 | 显示全部楼层
chunchun2017 发表于 2017-8-27 10:48
======================
运行结果:
请输入N的值:8

你代码有问题,输入1返回的值是[1,2]
不信你试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-27 23:18:15 | 显示全部楼层
  1. def newfib(n):
  2.     print(n,n+1,sep = "\n")
  3.     t = 2
  4.    
  5.     while True:
  6.         x = n + t
  7.         
  8.         if x % 2 == 0:
  9.             print(int(x / 2))
  10.             n = t
  11.             t = x / 2
  12.         else:
  13.             print(int(x))
  14.             n = t
  15.             t = x
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 00:14:01 From FishC Mobile | 显示全部楼层
def newfib(n):
    a=[1]
    if n>1:
        a.append(2)
    if n>2:
        for i in range (n-2):
            b=a[i+1]+a[i]
            if b % 2 == 0:
                a.append(int(b/2))
            else:
                a.append(b)
    return(a)

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 09:12:57 | 显示全部楼层
  1. def newfibRecursive(n):
  2.     if type(n) != int or n < 1:
  3.         rerurn - 1
  4.     if n <= 2:
  5.         return n
  6.     else:
  7.         re = newfibRecursive(n - 1) + newfibRecursive(n - 2)
  8.         if re % 2 == 0:
  9.             return int(re / 2)
  10.         else:
  11.             return int(re)


  12. def newfibIterative(n):
  13.     if type(n) != int or n < 1:
  14.         rerurn - 1
  15.     if n <= 2:
  16.         return n
  17.     else:
  18.         pre = 1
  19.         cur = 2
  20.         for i in range(3, n + 1):
  21.             re = pre + cur
  22.             if re % 2 == 0:
  23.                 re = re / 2
  24.             pre = cur
  25.             cur = re
  26.         return int(re)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 09:14:31 | 显示全部楼层
悲伤的自由 发表于 2017-8-27 22:05
你代码有问题,输入1返回的值是[1,2]
不信你试试

谢谢提醒,确实是考虑不周,已经修改了代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-28 14:36:39 | 显示全部楼层
  1. def newfib(n):
  2.     mylist=[1,2]
  3.     mylist.extend(int(mylist[i-3]+mylist[i-2]) if (mylist[i-3]+mylist[i-2])%2==1 else int((mylist[i-3]+mylist[i-2])/2) for i in range(3,n+1) )
  4.     print (mylist)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 18:45:13 | 显示全部楼层
def newfib(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
      
    temp = newfib(n-1) + newfib(n-2)
    if temp % 2 ==0:
        return temp //2
    else:
        return temp

newfib1 = []
n = int(input("请输入一个自然数:"))
for i in range(n):
    newfib1.append(newfib(i+1))
print(newfib1)

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 19:42:36 | 显示全部楼层
本帖最后由 foolwolf0068 于 2017-8-28 19:44 编辑
def Fibs(n):
    if n == 1:
        return 1
    elif n == 2:
        return 2
    else:
        c = Fibs(n-1) + Fibs(n-2)
        return (int(c/2) if (c % 2) == 0 else c)

def newfib(n):
    return [Fibs(x) for x in range(1,n+1)]

print(newfib(12))

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 19:59:51 | 显示全部楼层
本帖最后由 wwb_coco 于 2017-8-28 22:37 编辑

def newfib(n):
        if n < 1:
                return -1
        elif n < 3:
                return n
        else:
                fib = newfib(n - 1) + newfib(n - 2);
                if fib % 2 == 0:
                        return int(fib/2)
                else:
                        return fib
num = int(input('计算前多少个新斐波那契数列元素: '))
for i in range(1, num+1):
        print('第%d个: %d' % (i, newfib(i)))


PS:递归好慢啊啊啊啊啊啊啊啊啊

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 21:16:12 | 显示全部楼层
数列形式变化不大
  1. def newfib(n):
  2.     a,b = 1,2
  3.     for i in range(1,n):
  4.         a,b = b, a+b if (a+b)%2 else (a+b)//2
  5.     return a
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 22:24:03 | 显示全部楼层
def newfib(n):
  list0=[1,]
  if n>1:
    list0.append(2)
    for i in range(2,n):
      temp=list0[i-1]+list0[i-2]
      if(temp%2==0):
          temp=temp//2
      list0.append(temp)
  return list0
n=int(input('请输入N的值:'))
print(newfib(n))

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-28 22:53:40 | 显示全部楼层
  1. def newfib(n):
  2.     if n < 1:
  3.         return
  4.     if n == 1:
  5.         return [1]
  6.     t = [1, 2]
  7.     for i in range(2, n):
  8.         tmp = (t[-1]+t[-2]) if (t[-1]+t[-2])%2 else (t[-1]+t[-2])//2
  9.         t.append(tmp)
  10.     return t

  11. n=int(input())
  12. print(newfib(n))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2017-8-29 08:25:38 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-29 15:59:22 | 显示全部楼层
本帖最后由 bin132659 于 2017-8-29 16:02 编辑
  1. # -*- coding:utf8 -*-
  2. # /usr/bin/env python
  3. def newfib(n):
  4.         fib = [1,2]
  5.         for i in range(2,n):
  6.                 newvault=fib[i-2]+fib[i-1]
  7.                 if newvault%2 ==0:
  8.                         newvault/=2
  9.                 fib.append(newvault)
  10.         print fib

  11. newfib(28)
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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