[问题描述]
求最大整数n及下列不等式左边的值,使得1+(1+2)+(1+2+3+…+(1+2+3+… +n)≤m ( m为小于32768的正整数)
[输入]
一个正整数 m
[输出]
共一行,输出两个数。n的值及1+(1+2)+(+2+3+…+(+2+3+…+n)的值
# 递归
def func1t(n):
if n <= 1:
return 1
return n + func1t(n - 1)
def func1(m):
n = 0
n_res = 0
for i in range(1, m + 1):
t = n_res + func1t(i)
if t > m:
n = i - 1
break
n_res = t
print(n, n_res)
# 常规
def c(n):
ret = 0
for i in range(1, n):
ret = ret + i
return ret
def func2(m):
ret = 0
i = 0
while ret < m:
r = ret + c(i)
if r <= m:
ret = r
i = i + 1
else:
i = i - 2
break
print(i, ret)
# python 工具类 reduce
def func3t(x, y):
return x + y
def func3(m):
from functools import reduce
res = 0
n = 0
for i in range(1, m + 1):
i_ = [i for i in range(1, i + 1)]
i__ = reduce(func3t, i_)
if res + i__ > m:
n = i - 1
break
res = res + i__
print(n, res)
if __name__ == '__main__':
func1(0)
func2(0)
func3(0)
三种方式都可
[问题描述]
围绕着山顶有n个洞,一只兔子和一-只狐狸各住-一个洞,狐狸总想吃掉兔子。-天兔子对狐狸说,你想吃我有一个条件,你先站在第一个洞口,第- -次隔-一个洞找我,第二次隔两个洞找我,以后依次类推,次数不限。若能找到我,你就可以饱餐-顿,在没找到我之前不能停止。假定狐狸找了1000次,问兔子躲在哪些洞里才安全。
[输入]
共一行,一个整数n ( 50≤n≤60 )
[输出]
共一行,所有安全的洞编号(中间用空格隔开)
def func4():
a = [0] * 100
n = int(input())
j = 0
a[j] = 1
for i in range(1, 1001):
if i == 1: j = 1
j = j + i - 1
if j >= 99:
break
a[j] = 1
for i in range(1, n + 1):
if a[i] != 1:
print(i, end=" ")
输出 50 的运行结果:3 5 6 8 9 10 12 13 14 15 17 18 19 20 21 23 24 25 26 27 28 30 31 32 33 34 35 36 38 39 40 41 42 43 44 45 47 48 49 50