CSP真题【201812-2】 小明放学

CSP真题【201812-2】 小明放学

这题分两块写吧,因为自己按自己的想法写的代码没能满分>_<

先写借鉴别的大佬写的吧~~


def gettime(k,t,time):
    if k == 0:
        return t
    if k == 1:
        if time<=t:
            return t-time
        else:
            return gettime(3,g,time-t)
    if k == 2:
        if time<=t:
            return t-time+r
        else:
            return gettime(1,r,time-t)
    if k == 3:
        if time<=t:
            return 0
        else:
            return gettime(2,y,time-t)

if __name__ == '__main__':
	r, y, g = map(int, input().split())
	n = int(input())
	sum = 0
	arr = []
    ryg = r+y+g
    for i in range(n):
        arr.append([0, 0])
        arr[i][0], arr[i][1] = map(int, input().split())
        sum += gettime(arr[i][0],arr[i][1],sum%ryg)
    print(sum)

我觉得真的是很巧妙,用了递归,真的是没有想到,积累起来—>所以我的想法是在每一种情况里进行计算,看小明到达这个路口的时候是什么颜色,还剩多长时间!!(tips:累的苦哈还没拿到分数,各位有空可否指点一二,感激不尽!!!)

bia代码:

# 输入三种灯的时间 
r, y, g = map(int, input().split())
# 输入一共多少段
n = int(input())
sum = 0
# 每一段用这个列表保存
arr = []
for i in range(n):
    arr.append([0, 0])
    arr[i][0], arr[i][1] = map(int, input().split())
    # 0的时候表示路,啥也不用管,直接加
    if arr[i][0] == 0:
        sum = sum + arr[i][1]
        # print(sum)
    else:
        # 1的时候表示红灯
        if arr[i][0] == 1:
            # 判断红灯的剩余时间和之前所有时间的大小,如果红灯时间久,小明过来还是红灯-->等着
            if (arr[i][1] - sum) > 0:
                mid = arr[i][1] - sum
                sum = sum + mid
            # 和刚开始相比,变灯了
            else:
                cha = (sum - arr[i][1]) % (r + y + g)
                if cha < g:
                    sum = sum
                # elif cha < g + y:
                #     sum = sum + y - cha
                elif cha < g + y + r:
                    sum = sum + g + r + y - cha
            # print(sum)
        # 2表示黄灯
        if arr[i][0] == 2:
            if (arr[i][1]- sum) > 0:
                mid = arr[i][1] - sum
                sum = sum + mid + r
            else:
                cha = (sum - arr[i][1]) % (r + y + g)
                if cha < r:
                    sum = sum + r - cha
                elif cha < r + g + y:
                    sum = sum + y + 2 * r + g - cha
            # print(sum)
        # 3表示绿灯
        if arr[i][0] == 3:
            if (arr[i][1] - sum) > 0:
                sum = sum
            else:
                cha = (sum - arr[i][1]) % (r + y + g)
                if cha < y + r:
                    sum = sum + r + y - cha
            # print(sum)
print(sum)

找了很久,还是没找到自己错在哪块,求教!!!

总结一下自己的问题吧:

  1. 习惯一整块往下写,一般不会考虑到使用函数–>写程序很麻烦冗余 ……吸取教训!!
  2. 递归思想确实掌握不是很到位!
  3. 加油加油加油~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值