鱼C论坛

 找回密码
 立即注册
查看: 9615|回复: 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开始。
写出这个函数。
def newfib(n)
    ......
n的取值从1开始。

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

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-8-27 10:48:53 | 显示全部楼层
本帖最后由 chunchun2017 于 2017-8-28 09:12 编辑
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))
======================
运行结果:
请输入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 | 显示全部楼层
def newfib(n):
    a, b = 1, 2
    result = []
    for i in range(n):
        result.append(a)
        if (a+b)%2 == 0:
            a, b = b, (a+b)//2
        else:
            a, b = b, a+b
    return result

评分

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

查看全部评分

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

使用道具 举报

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

fib(12)

# 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 编辑
def newfib(n):
    if n ==1:
        return 1
    if n == 2:
        return 2
    else:
        temp = newfib(n-1) + newfib(n-2)
        if temp%2 != 0:
            return temp
        else:
            return temp//2

str1 = []
n = int(input("请输入一个自然数:"))
for i in range(n):
    str1.append(newfib(i+1))
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 | 显示全部楼层
def newfib(n):
    print(n,n+1,sep = "\n")
    t = 2
    
    while True:
        x = n + t
        
        if x % 2 == 0:
            print(int(x / 2))
            n = t
            t = x / 2
        else:
            print(int(x))
            n = t
            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 | 显示全部楼层
def newfibRecursive(n):
    if type(n) != int or n < 1:
        rerurn - 1
    if n <= 2:
        return n
    else:
        re = newfibRecursive(n - 1) + newfibRecursive(n - 2)
        if re % 2 == 0:
            return int(re / 2)
        else:
            return int(re)


def newfibIterative(n):
    if type(n) != int or n < 1:
        rerurn - 1
    if n <= 2:
        return n
    else:
        pre = 1
        cur = 2
        for i in range(3, n + 1):
            re = pre + cur
            if re % 2 == 0:
                re = re / 2
            pre = cur
            cur = re
        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 | 显示全部楼层
def newfib(n):
    mylist=[1,2]
    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) )
    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 | 显示全部楼层
数列形式变化不大
def newfib(n):
    a,b = 1,2
    for i in range(1,n):
        a,b = b, a+b if (a+b)%2 else (a+b)//2
    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 | 显示全部楼层
def newfib(n):
    if n < 1:
        return
    if n == 1:
        return [1]
    t = [1, 2]
    for i in range(2, n):
        tmp = (t[-1]+t[-2]) if (t[-1]+t[-2])%2 else (t[-1]+t[-2])//2
        t.append(tmp)
    return t

n=int(input())
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 编辑
# -*- coding:utf8 -*-
# /usr/bin/env python
def newfib(n):
        fib = [1,2]
        for i in range(2,n):
                newvault=fib[i-2]+fib[i-1]
                if newvault%2 ==0:
                        newvault/=2
                fib.append(newvault)
        print fib

newfib(28)

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 01:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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