经典重拾-第一部分 语言篇-第二章 -循环结构程序设计

有经验的程序猿总是尽量缩小变量定义范围。
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 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值