蓝桥杯等考Python15级(乘车系统)

乘车系统
题目描述:
地铁的每站都有检票闸机,乘客进站和出站都要刷乘车卡,每刷一次卡,系统会记录持卡人的卡号(卡号不会有重号)。
地铁乘车系统根据刷卡的记录,可以计算出一段时间内的3项运营数据:
1.完成乘车的人次:进站和出站各刷一次卡,算作一次乘车,多次乘车计数累计;
2.正在乘车的人:进站后还没出站的乘客,计入正在乘车的人数;
3.乘客总人数:乘客人数指有刷卡记录的乘客总数,多次乘车不重复计数。
已知一段时间内的全部刷卡记录,请分别计算完成乘车的人次、正在乘车的人数和乘客总人数。
例如:
系统获取的刷卡记录(卡号)是484 2114 2484,其中,
卡号为8的乘客乘车1次,已出站;
卡号为2的乘客乘车1次,已出站;
卡号为4的乘客乘车3次,前2次已出站,第3次还没出站;
卡号为11的乘客乘车1次,还没出站。
可知:
完成乘车的人次为4,分别是:4(用卡号代表乘客)两次,2和8各1次;
正在乘车的人数为2,是4和11;
乘客总人数为4,分别是2,4,8,11。
输入:
一个字符串,包括若干个整数号码(整数的个数不超过100),同一号码可能出现多次,相邻两个号码用一个空格分隔,表示一段时间内,系统记录的
全部刷卡卡号记录。
输出:
三行,每行一行整数,分别是:这段时间内完成乘车的人次、正在乘车的人数和乘客总人数。

输入样例:
4  8 4 2 1 1 4 2 4 8 4
输出样例:
4
2
4

参考答案:

#参考程序1:
lis = [int(i) for i in input().split(' ')]
dic = {} #建立空字典
for i in lis:
    dic[i] = lis.count(i) #将“元素——出现次数”作为一个键值对,加入字典
ans1 = 0
ans2 = 0 
ans3 = len(dic)
for k, v in dic.items(): #遍历字典,k是键,v是值
    ans1 += v // 2
    if v % 2 == 1:
        ans2 += 1
print(ans1)
print(ans2)
print(ans3)
#参考程序2:
a = [int(i) for i in input().split(' ')]
a.sort()
s = [] #建立空栈
p = 0 #栈内元素个数
ans1 = 0
ans2 = 0
ans3 = 0
for i in range(len(a)):
    if p == 0: #栈为空
        s.append(a[i]) #入栈
        p += 1
    elif a[i] == s[p-1]: #与栈顶相同
        del s[p-1] #栈顶出栈
        p -= 1
        ans1 += 1
    else: #与栈顶不同
        s.append(a[i]) #入栈
        p += 1
print(ans1)    
print(len(s)) #还没出站的人数等于栈内元素个数
print(len(set(a)))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值