0

常见调试技巧

当你遇到一个题目,没有满分通过的时候,你一般会怎么做呢?

  • 有些同学会直接问老师,可能就错过了一个很好的学习机会,在这之前不妨先试着自己思考和解决一下。

推荐的方式

  1. 对错误进行分类:编译错误和答案错误。如果是编译错误,先读懂编译器给出的错误提示(读不懂可以网上搜索或者求助于别人),再去寻找错误。
  2. 如果是答案错误,往往可能是自己写的代码和自己脑子里的想法不太一致(大多数时候),或者是自己设计出来的算法就有问题(少数时候)
  3. 先看下样例数据能不能过,或者自己设计一组程序输出和答案不一样的数据。如果实在设计不出来,可以找老师要出错的那一组数据。
  4. 方式一:将较为简单的一组测试数据代入程序,用纸和笔模拟程序运行,将中间结果记录在纸上。同时也用脑子计算一边,看到底是哪一步开始出问题了
  5. 方式二:也可以在代码里增加一些print语句输出中间结果,帮助我们更快了解程序运行到每一关键步骤的状况。同样与人脑计算的结果对比,看看哪一步出问题了。
  6. 如果自己还是搞不定,可以求助身边一些水平较高的同学,也可以来问老师。

其实我们平时写代码的时候,也可以写一部分,测试一部分。而不是整个代码写完了再去调试,这样往往需要花更多的时间去找出问题。

找一找下面这段代码的问题

题目:http://oj.oldmoon.cn/p/P2240image.png

nt=input().split()
n=int(nt[0])
t=int(nt[1])
m=[]
men=0
for i in range(n):
    a,b=map(int,input().split())
    m.append((b/a,a,b))
m.sort()
for j in range(n):
    if m[j][1] <= t:
        men+=m[j][2]
        t-=m[j][1]
    else:
        men=men+(t*m[j][0])
print("%.2f" % men)
上一章
递推
下一章
三级