有经验的程序猿总是尽量缩小变量定义范围。
for(int i=0; i<n; i++)【哈哈,我就是如此····
浮点运算可能存在误差。在进行浮点数比较时,应考虑到误差。
调试程序时,不推荐利用IDE和gdb跟踪调试,更通用的是:输出中间结果【嗯 我就是这么干的···
涉及long long的输入输出要注意,不同的编译器,printf的输出格式不同,MinGW的gcc中 %lld 改成 %I64d 后续章节有深入讨论
10的-6次方 表示 1e-6
Note
要计算只包含加法,减法,和乘法的整数表达式除以正整数n的余数,可以在每步计算之后对n取余,结果不变。
可以使用ctime 和 clock()函数 获得程序运行时间,不要直接使用clock()的返回值,而应总是除以CLOCKS_PER_SEC
常数CLOCKS_PER_SEC和操作系统相关
循环程序设计最常见的两个问题:算数运算溢出 和 程序效率低下。都不容易解决···后续章节进一步讨论。
本节介绍了两个相当实用的工具——输出中间结果和计时函数。
【算法竞赛中的输入输出框架】
在Windows下,输入完毕后先按Enter 再Ctrl+Z 最后Enter 结束输入。
Linux下,输入完毕后 直接Ctrl+D即可。
好的方法如下
输入输出数据都保存在文件中。
【之前我都是保存输入数据的
至于 输出也保存在文件中是因为,避免 输出太多一卷屏前面的看不见了这样的尴尬。。
最简单的是
输入输出重定向
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#define LOCAL 定义在程序首部,提交之前不选择即可。
一个更高级的方法是在编译选项里定义这个LOCAL符号【参考附录A
比赛时用文件输入输出并且禁止重定向 用fopen 和 fscanf/fprintf【具体不扩展了···国内比赛不太可能用到
程序的鲁棒性
之scanf("%d",&n)==1 scanf要加上判断是否输入结束 即使指明了以n==0为结束。
即程序的鲁棒性强,有时能在数据有瑕疵的情况下仍然AC