冬雪雪冬 发表于 2017-8-27 10:06:04

Python:每日一题87(答题领鱼币)

题目:
我们都知道斐波那契数列,它的下一个数为前两个之和,前12个如下:
1123581321345589144
下面我们稍微改变一下规则,如果算出的下一个数是偶数,则取它被2整除的值,前12个如下:
123549131112233529
为了使数列不都为1,从1和2开始。
写出这个函数。
def newfib(n)
    ......
n的取值从1开始。

我的解法:
**** Hidden Message *****

chunchun2017 发表于 2017-8-27 10:48:53

本帖最后由 chunchun2017 于 2017-8-28 09:12 编辑

def newfib(n):
list0=
if n>1:
    list0.append(2)
    for i in range(2,n):
      temp=list0+list0
      if(temp%2==0):
          temp=temp//2
      list0.append(temp)
return list0
n=int(input('请输入N的值:'))
print(newfib(n))
======================
运行结果:
请输入N的值:1

请输入N的值:2

请输入N的值:8

bush牛 发表于 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

pythonlaser 发表于 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

l1993520 发表于 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=' ')

wc365 发表于 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)

悲伤的自由 发表于 2017-8-27 22:05:24

chunchun2017 发表于 2017-8-27 10:48
======================
运行结果:
请输入N的值:8


你代码有问题,输入1返回的值是
不信你试试

Sherman 发表于 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

suloman 发表于 2017-8-28 00:14:01

def newfib(n):
    a=
    if n>1:
      a.append(2)
    if n>2:
      for i in range (n-2):
            b=a+a
            if b % 2 == 0:
                a.append(int(b/2))
            else:
                a.append(b)
    return(a)

Greenland 发表于 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)

chunchun2017 发表于 2017-8-28 09:14:31

悲伤的自由 发表于 2017-8-27 22:05
你代码有问题,输入1返回的值是
不信你试试

谢谢提醒,确实是考虑不周,已经修改了代码

古堡主人。 发表于 2017-8-28 14:36:39

def newfib(n):
    mylist=
    mylist.extend(int(mylist+mylist) if (mylist+mylist)%2==1 else int((mylist+mylist)/2) for i in range(3,n+1) )
    print (mylist)

emilyying 发表于 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)

foolwolf0068 发表于 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

print(newfib(12))

wwb_coco 发表于 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:递归好慢啊啊啊啊啊啊啊啊啊

solomonxian 发表于 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

BeginnerSK 发表于 2017-8-28 22:24:03

def newfib(n):
list0=
if n>1:
    list0.append(2)
    for i in range(2,n):
      temp=list0+list0
      if(temp%2==0):
          temp=temp//2
      list0.append(temp)
return list0
n=int(input('请输入N的值:'))
print(newfib(n))

tich 发表于 2017-8-28 22:53:40

def newfib(n):
    if n < 1:
      return
    if n == 1:
      return
    t =
    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))

青春光环 发表于 2017-8-29 08:25:38

看看

bin132659 发表于 2017-8-29 15:59:22

本帖最后由 bin132659 于 2017-8-29 16:02 编辑

# -*- coding:utf8 -*-
# /usr/bin/env python
def newfib(n):
        fib =
        for i in range(2,n):
                newvault=fib+fib
                if newvault%2 ==0:
                        newvault/=2
                fib.append(newvault)
        print fib

newfib(28)
页: [1] 2 3 4
查看完整版本: Python:每日一题87(答题领鱼币)