Rosalind 生信解題 | IN4. Conditions and Loops +判断奇偶数

题目连结:https://rosalind.info/problems/ini4/

在这里插入图片描述

输入:

100 200

输出:

7500

计算所有在a~b之间的奇数数字

python 没有内建 isOdd() 函式,所以只能写if判断奇数、偶数

a, b = 100, 200

total = 0  # 如果用sum作为变数名称会与内建函数冲突。如果取名为s会误以为是string缩写

for i in range(a, b+1):
    if i % 2 == 1:
       total += iprint(total)

也有人使用 i&1 来做计算:某数字是不是经过 “and musk 1” 之后为True
这概念在底层语言(例如C语言)效能上会快很多
但由于Python在实作方式的关係,这样写的运行速度不会比较快

程式码:

if x & 1:
    return 'odd'
else:
    return 'even'

迴圈解的解法,时间複杂度是O(n)

当数字量非常大的时候

(头+尾) x N / 2
此时可以运用公式解法(等差数列求和)

将头尾数字相加,乘以项数(将数字差除以2)
ex: 1~9 => 1+3+5+7+9 = (1+9)*5/2 = 25
ex: 0~10 => 1+3+5+7+9 = (1+9)*5/2 = 25,计算结果同上

但是要先取边界将数值调整为1与9(调整至奇数)
程式码:

a, b = 100, 200

# 如果a, b是偶数,则调整为奇数
if a % 2 == 0:
    a += 1
if b % 2 == 0:
    b -= 1

# 也可这样写,如果a是偶数则+1;如果b是偶数,则-1
# a += a % 2 == 0
# b -= b % 2 == 0

n = (b - a) // 2 + 1 # 奇数项数
total = n * (a + b) // 2

print(total)

公式解法,时间複杂度为O(1),可大幅解省执行所需时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值