python编程练习(七)

一:做俯卧撑

老师规定,当在心中数到 k-1 时,下一个数字从0开始数。例如,当k=13时,同学们报出的前几个数依次为:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
如果有一位同学说错,那么他将做与当轮游戏中第一位同学所有说出的数字的总和(即第一位同学说了T个数字的总和)相同的俯卧撑数。
输出一行,包含一个整数,表示该同学做的俯卧撑数。
分析:巧妙使用余数运算%

"""
1  2  4
7  11 3
9  3  11
"""
n,k,T=map(int,raw_input().split())   # 3 13 3
num=n*(T-1)+1                        # num=7
val,arr,flag=1,[],0
for i in range(1,num+1):
    val += i - 1
    while val>=k:
        val=val%k
    # print i,val,arr
    if i%n==1:
        arr.append(val)
print sum(arr)

二:数数练习

为了鼓励宝宝坚持数数,每当宝宝数到7 或者包含7、还有7 的倍数时,爸爸会竖起大拇指以示鼓励。下表是 n=4 的数数情况(X 表示爸爸竖起大拇指)。当编号为 3 的玩具遇到爸爸第3次竖起大拇指的时候,宝宝实际上数到了 27。
玩具 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3
数数 1 2 3 4 5 6 X 8 9 10 11 12 13 X 15 16 X 18 19 20 X 22 23 24 25 26 X
给定 n,m 和 k,你的任务是计算当编号为 m 的玩具遇到爸爸第 k 次竖起大拇指时,宝宝实际上数到了几。

while True:
    n,m,k=map(int,raw_input().split())
    if n==0 and m==0 and k==0:
        break
    i,j,num=1,1,0
    minval=0
    while num<k:
        a, b = 7 * i, 7 + 10 * j     # 得到7或者包含7、还有7的倍数。
        if a<b:
            minval=a
            i+=1
        else:
            minval=b
            j+=1
        y=minval%(2*n-2)
        if y==0 and m==2:
            num += 1
        elif y<=n and y==m:
            # print minval,num
            num+=1
        elif y>n and 2*n-y==m:
            # print minval,num
            num+=1
        else:
            pass
    print minval

三:黑默丁格的炮台

第一行9个整数,R,x1,y1,x2,y2,x3,y3,x0,y0。(0 <= R,x1,y1,x2,y2,x3,y3,x0,y0 <= 100) R 代表炮台攻击的最大距离,(x1,y1), (x2,y2), (x3,y3)代表三个炮台的坐标。(x0,y0)代表敌人的坐标。如果一个炮台能攻击到敌人,那么会对敌人造成1X的伤害。

R,x1,y1,x2,y2,x3,y3,x0,y0=map(int,raw_input().split())
d1=((x1-x0)**2+(y1-y0)**2)**0.5
d2=((x2-x0)**2+(y2-y0)**2)**0.5
d3=((x3-x0)**2+(y3-y0)**2)**0.5
res=0
if d1<=R:
    res+=1
if d2<=R:
    res+=1
if d3<=R:
    res+=1
print str(res)+'X'

三:刮刮卡兑换

凭3个刮刮卡可以兑换一盒同等价位的米粉,并且可以一直循环下去,对于初始买入的n盒米粉,最后一共能拿到多少盒米粉。

n=int(raw_input())
b,res=n,n
while b>=3:
    res+=b/3
    b=b/3+b%3
print res

四:最大间隔

给定一个递增序列,a1<a2<…<an。定义这个序列的“最大间隔”为
现在要从a2,a3…an-1中删除一个元素,问剩余序列的“最大间隔”最小是多少?

n=int(raw_input())
arr=map(int,raw_input().split())
res,minval=[],0
for i in range(n-1):
    res.append(arr[i+1]-arr[i])
for i in range(1,n-1):
    arr1=res[:]
    arr1.pop(i-1)
    arr1.pop(i-1)
    arr1.append(arr[i+1]-arr[i-1])
    mid=max(arr1)
    if minval==0:
        minval=mid
    elif mid<minval:
        minval=mid
    else:
        pass
print minval

五:小球的距离

小赛和三个小朋友站在不同的楼层,同时放下手中的小球,当小球全部落到地面不跳时,求4个小球一共经过了多少米?(数字都为整数)

arr=map(int,raw_input().split())
resval=0
def calHight(val):
    res = val
    while val>1:
        val = int(val/2)   # >>> int(1.4)-1
                           # >>> int(1.9)-1
        res += val*2
    return res
for val in arr:
    resval+=calHight(val)
print resval

六:小赛旅游

输入,第一行有两个数字,第一个数字为竹筐装满可以走的公里数,即N值;第二个数字为起点到终点之间的村庄个数。第二行为起点和村庄、村庄之间、村庄和终点之间的距离。这些数字都为整数,且范围不能超过一个int型表达的范围。
输出,至少需要补充食物的次数。
分析:数组里面和能够小于等于某个数的个数

n,m=map(int,raw_input().split())
N=n
arr=map(int,raw_input().split())
count = 0
for i in range(m):
    if N < arr[i]:
        break
    elif N-arr[i] >= arr[i+1]:
        N = N-arr[i]
    else:
        N = n
        count+=1
print count

七:博弈问题

参照:https://blog.csdn.net/jnulzl/article/details/52504225

n,m,x=map(int,raw_input().split())
p,q=map(float,raw_input().split())    # p,q=map(int,raw_input().split())是错误的
result = (x * p) / (q * (n + 1) - p * n)
if result < 1.0:
    print '%.2f' % (1)
elif result > m:
    print '%.2f' % (m)
else:
    print '%.2f' % (result)

猜你喜欢

转载自blog.csdn.net/qq_27163197/article/details/80896538
今日推荐