不得不说这是个很简单的问题,最正常的做法是输出 “N/A”,然后循环 10000 次,但是亦可以挖掘出很多有意思的东西来。
首先,我显然太久不写程序了,又或者太依赖编译器了。我说,这个 ‘/’ 貌似要处理一下吧。立马被人打击了,” 才是转义字符的前缀… 嗷嗷,没脸见人了。这里我再罗唆一下,学了太多太过相似又略有不同的计算机语言我都秀逗了,不说对这些特殊字符的输出处理不同,只说注释的标记苻我都晕菜了。C、C++用 “//”,或者”/*”,”*/”,matlab 用”%”,VB.NET 用 “’”, 汇编用”;”,java 太历史久远不记得了…
(FW 老师就教我们这些细枝末节东西, 我有什么办法呢,于我心有戚戚焉)
然后,循环是这次讨论的重点。循环就程序的执行而言是做了很多无用功的,比如加法和比较。
我跟 linux 说你写个不用循环的试试,然后这厮说你不允许我手动 10000 次么?(此人说话向来的又绕又罗唆,我解释一下,就是手动执行输出一个 “N/A” 的程序 10000 次)
我无语了,那你还写个程序干什么?回到打孔机时代了?(终于给我占了一次上风)
此同学仍不死心,说我在程序里写 10000 个 “N/A” 可不可以?Orz… 我的意见是耗费人力,而且容易出错,代码可读性不好,可移植性不好。
linux 同学说,耗费人力、容易出错倒不见得。你可以先写个东西输出 10000 个 “N/A” 到文件,然后全选复制粘贴。大家大概会觉得很离谱,但是写程序的追求应该给客户最好的,而不是追求自己的方便。我不得不说他的方法很强大… 但是,这是个简单问题,这样解决没问题,但若是碰到个复杂点的问题,你如何保证你的那个程序的输出是正确的?无疑给程序的调试增加了无数的麻烦。
(我只是对当前程序说的.. 同学你别偏离方向, 我们说的是执行效率, 而不是软件工程)
再说说可读性跟可移植性问题。就可读性而言,linux 说只需要写一行注释就解决了。“//output N/A 10000 times” 这点我不反对。然后是可移植性,若是我现在需要输出 100000 次 “N/A”, 你是应该再加个循环呢还是再复制粘贴”N/A“串?然后,若我是要输出 5000 呢?大哥,这回就麻烦了吧… 你怎么数 5000 个”N/A“删掉?重写貌似效率更高了。
还有一个问题,这样庞大的代码编译出来的程序会不会具有更庞大的体积?难道这就是传说中的空间换时间?
(额, 我们是讨论执行效率问题, 可谓不折手段了)
接下来就数学角度分析一个下个问题。这里看一下纯循环的程序(linux 打击说你怎么还用输出流… 没办法,我被 C++纵坏了)
#include iostead
(应该是 iostream, 虫虫飞秀逗了)
int main()
{
for(int i=0;i<10000;i++)
std::cout<<“N/A”;
(竟然没有 return, 实在不知道程序是怎样写的, 这样肯定编译不过, 而且在 for 里面用 cout 肯定效率不高)
}
若把循环次数减少减半,也就是减少 5000 次,你只需要多敲一个 “N/A”,然后再想减半(减少 2500 次),就要多敲两个 “N/A” 了。也就是说,可减少的次数是指数递减的,而需要多敲的 “N/A” 的次数是指数递增的。所以,当你敲了 5000 个 “N/A” 的时候为了节省一次循环就要多敲 5000 个,这是不是很不经济?
(此人说话也极为啰嗦)
最后
我跟 linux 说,我的做法大概是 cout<<“N/AN/A” 就算了…
linux 说他肯定直接用循环,一个 “N/A” 都不多敲,因为计算机执行这种东西根本就是秒杀,不对,根本不用秒…
嗷嗷,这两个无聊的人, 最终我们十二点半才结束这个话题,明显我撑着眼皮陪此人无聊了,不过自作孽者还是比较惨的… 最是夜深人静水凉时,洗澡去了…
中午的时候还讨论过一个问题,日志里贴不贴这些跟学术有关的东西。其实只是觉得有趣,很想跟大家分享一下,I just want to share my joyance with you. 但是明显是会造成很多误解的,别人也许会觉得你是显摆,炫耀啊云云… 说到这里时,linux 说你心既我心,共鸣了啊…
(我的原话是 I just want to share my happy joyance with you. 真是共鸣, 强烈支持, 我现在只敢弄些老少咸宜的东西上来, 我要尽量让文科同学都能看懂, 虽然这很不现实)
特贴此文,试水。
ps:我终于也水高八斗,溢出来了…
(我们都很水, 这是历史所证明了的)
啊啊啊…
我真的太久没写 C++程序了… 如此丢人…