乘车系统
题目描述:
地铁的每站都有检票闸机,乘客进站和出站都要刷乘车卡,每刷一次卡,系统会记录持卡人的卡号(卡号不会有重号)。
地铁乘车系统根据刷卡的记录,可以计算出一段时间内的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)))