python-趣味百题4

1.赛场统分
在编程竞赛中,有10个评委为参赛选手打分,分数为0-100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
思路:
1).随机生成n个分数,放到列表s中
2).找到最高分数和最低分数MaxScore,MinScore
3).累加求和后减去最高分和最低分,除以n-2


import random
def averageScore(n):
  s = []
  for i in range(n):
    s.append(random.randint(0,100))
  print s

  maxScore = 0
  minScore = 100
  sumScore = 0
  for k in s:
    if maxScore < k:
     maxScore = k
    if minScore > k:
     minScore = k
    sumScore += k
  return float(sumScore - maxScore - minScore) / (n - 2)

print averageScore(10)

列表解析:
def averageScore2(n):
  s = [random.randint(0,100) for i in range(n)]
  return float(sum(s) - max(s) - min(s)) / (n - 2)
print averageScore2(10)

2.回文数

回文数:是一种数字,如98789,这个数字正着读倒读都是98789
判断一个数是否是回文数
思路:
1).取出每一个位放入列表
2).a[i] == a[-i-1],i范围0-len(a)/2
def isPalindromeNum(n):
  a = []
  while n > 0:
    a.append(n % 10)
    n /= 10
  for i in range(len(a)/2):
    if a[i] != a[-i-1]:
    return False
  return True

print isPalindromeNum(n)

3.埃及分数式

分子是1的分数,叫单位分数。古代埃及人在进行分数运算时,只使用分子是1的分数,因此这种分数也叫做埃及分数式或者叫单分子分数。
要求随便输入一个真分数,将该分数分解为埃及分数式,如3/7=1/3+1/11+1/231
思路:
1).对于一个真分数a/b,找最接近的1/k
2).如果a % b == 0 ,找到k = b/a
3).如果a % b != 0 ,找到k = b/a+1


def fun(a,b):
  k = b / a
  if b % a == 0:
    res = '1/%s' % k
  else:
    k += 1
    res = '1/%s + %s' % (k,fun(a * k - b,b * k))
  return res
print fun(2,3)

 

转载于:https://www.cnblogs.com/lucia8522/p/6808381.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值