python编程练习(一)

一:股神

股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天…依此类推。为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?
分析:
1,2:减0
3,4,5:减2
6,7,8,9:减4

def calue(n):
    a,b = 2,n
    while b>a:
        b=b-a
        a=a+1
    return n-(a-2)*2
while True:
    n = int(raw_input())
    if n!="":
        val = calue(n)
        print(val)
二:翻转数组

给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列。
原始数组为a[1], a[2], …, a[l-2], a[l-1], a[l], a[l+1], …, a[r-1], a[r], a[r+1], a[r+2], …, a[n-1], a[n]。
将片段[l,r]反序后的数组是a[1], a[2], …, a[l-2], a[l-1], a[r], a[r-1], …, a[l+1], a[l], a[r+1], a[r+2], …, a[n-1], a[n]。
分析:
1,2,3,4,5,6有2,1,3,4,5,6 / 1,2,4,3,5,6 / 1,2,3,4,6,5
比如1,2,4,3,5,6;首先3<4,得到a为2,alist[a]=4;找完a开始找b为4,alist[b]=5;

n = int(raw_input())
alist = map(int,raw_input().split())
if n==1:
    print "yes"
def list_jud(alist):
    for i in range(len(alist)-1):
        if alist[i + 1] < alist[i]:
            return False
    return True
# 找出翻转的列表下标
a,b,i=0,0,0
flag=True
while b==0 and i<=n-1:
    i+=1
    if flag:
        if alist[i] < alist[i-1]:
            a = i-1
            flag = False
    else:
        if alist[i] > alist[i-1]:
            b = i-1
if alist[b]<alist[a-1] and a>0:
    print "no"
else:
    blist=[alist[a]]+alist[b+1:]
    if list_jud(blist):    # 翻转后是否升序
        print "yes"
    else:
        print "no"
三:约德尔测试

这个字符如果是字母或者数字,这个字符变为1,其它变为0;然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来越光明。
分析:
如果这个字符如果是字母或者数字:
if a1[i].isdigit() or a1[i].isalpha()
输出一行,在这一行输出相似率。用百分数表示。(相似率为相同字符的个数/总个数,精确到百分号小数点后两位。printf(“%%”);输出一个%。)
res = a*100/float(l)
print ‘%.2f%%’%res

a1 = list(raw_input())
b1 = list(raw_input())
l=len(a1)
a,b = 0,0
for i in range(l):
    if a1[i].isdigit() or a1[i].isalpha():
        if b1[i]=='1':
            a+=1
    elif b1[i]=='0':
        a+=1
    else:
        pass
res = a*100/float(l)
print '%.2f%%'%res
四:路灯

这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。其中d表示路灯能够照亮的街道上的点与路灯的最远距离,找到最小的d是多少?
样例输入
7 15
15 5 3 7 9 14 0
分析:
找出中间路灯最大距离,与两端距离取最大值

n,l = map(int,raw_input().split())
arr = map(int,raw_input().split())
arr.sort()
max = 0
for i in range(n-1):
    if arr[i+1]-arr[i]>max:
        max = arr[i+1]-arr[i]
a,b=2*(arr[0]),2*(l-arr[n-1])
if a>max:
    max = a
if b>max:
    max= b
print'%.2f'%(max/2.0)
五:计算器的新功能

实现当输入一个数时,能够将这个数分解成一个或多个素因子乘积的形式,并按素因子的大小排列显示出来。
对于每个数,将它分解成若干个素数乘积的形式,并按从小到大的顺序输出,素因子之间用“ * ”的形式连接。
分析:
100
[2, ‘‘, 2, ‘‘, 5, ‘*’, 5]

while True:
    n = int(raw_input())
    res=[]
    for i in range(2,n+1):
        while n%i==0:
            res.append(i)
            res.append('*')
            n = n/i
    res.pop()
    digit = [
        [" - ", "   ", " - ", " - ", "   ", " - ", " - ", " - ", " - ", " - ", " "],
        ["| |", "  |", "  |", "  |", "| |", "|  ", "|  ", "  |", "| |", "| |", " "],
        ["   ", "   ", " - ", " - ", " - ", " - ", " - ", "   ", " - ", " - ", "*"],
        ["| |", "  |", "|  ", "  |", "  |", "  |", "| |", "  |", "| |", "  |", " "],
        [" - ", "   ", " - ", " - ", "   ", " - ", " - ", "   ", " - ", " - ", " "]
    ]
    for j in range(5):
        line=""
        for num in res:
            if num=='*':
                line = line+digit[j][10]
            else:
                for bit in list(map(int, list(str(num)))):
                    line = line + digit[j][bit]
        print line
六:公交车乘客

一个公交车经过n个站点,乘客从前门上车,从后门下车。现在统计了在第i个站,下车人数a[i],以及上车人数b[i]。问公交车运行时候车上最多有多少乘客
分析:
没输入一站,保存车上人数,并记载最大人数

n = int(raw_input())
res,max=[],0
for i in range(n):
    m = map(int,raw_input().split())
    if i==0:
        res.append(m[1])
    else:
        res.append(res[i-1]+m[1]-m[0])
    if max<res[i]:
        max=res[i]
print(max)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值