例如,例如:
第一届国际奥林匹克运动会将于2013年在澳大利亚举行,你决心赢得比赛。虽然你不想和这种黏黏的、神经质的生物有任何关系,但是你计划进入一个像青蛙一样的机器人,你知道它比所有其他的有机进入者都要快。
IOF发生在一个大池塘中,其中有一系列的百合垫,排列在一条长线上。比赛的规则很简单:你的青蛙会被放在第一个百合垫上,然后它必须跳到第二个百合垫上,然后再跳到第三个百合垫上,直到到达最后一个百合垫为止。请注意,你不能‘跳’百合垫-每一个百合垫必须跳一次。第一只到达最后一层百合垫的青蛙将赢得比赛。因为你的机器人青蛙有超级青蛙的速度,你对你的胜利充满信心。
然而,你的青蛙有一个小的无法纠正的缺陷-它只能跳一个固定的距离。具体来说,它只能从它现在的位置跳到刚好K米的地方,即使它把青蛙降落在水中(在那里它会迅速短路)。
由于最初的百合垫的位置可能使你的青蛙不可能到达最后的百合垫,你计划分散注意力,移动百合垫,使它们完全间隔K米,使你的青蛙能够从第一个跳到最后一个,而不会掉进水中。将百合花垫移一米会花你一秒时间,你偷偷移动百合垫的时间越长,IOF评委就越有可能注意到你并取消你参加比赛的资格。
考虑到课程中百合垫之间的初始距离,你必须编写一个程序来计算你必须花在移动的百合垫上的最短时间,这样所有连续的百合花都正好相隔K米。你可以假设池塘足够长,所以第一个百合垫可以移动任何距离后,最后一个百合垫可以移动任何距离向前。
您的程序应该从文件frogin.txt中读取。该文件的第一行将由两个空格分隔的整数N和K组成,下面的N1行将包含连续对百合垫之间的初始距离。具体来说,ith线将包含一个整数,表示ith和(i+1)th百合垫之间的距离。
您的程序应该写入文件frogout.txt。您的输出文件应该包含一个整数的一行:移动百合垫的最小总时间,以确保您的胜利。
这是澳大利亚信息学奥林匹克运动会的样本问题,我碰巧在网上看到了它。
但我不相信任何与现实生活没有直接联系的编程相关问题都会对一个人的实际编程能力产生任何有益的影响。他们会吗?
发布于 2014-01-27 08:54:05
想想看:
因此,IMHO是的,解决这样的问题可以教你如何成为一个更好的程序员。当然,他们不会教你所有关于现实世界编程的知识,尤其是没有涉及到一种特殊技术的东西。但是“澳大利亚信息学奥林匹克运动会”(或其他国家的信息学奥林匹克)是关于信息学的,而不是关于现实世界的编程,所以它有一个不同的目标。
发布于 2014-01-27 15:02:15
通常,当人们抱怨问题的相关性时,这意味着他们觉得问题太难了。通过解决困难的问题,你才会成长。反复解决容易的问题,你得到的最好结果就是你能更快地解决简单的问题。
这些问题都是有趣的,但这并不意味着它们与程序员的日常工作无关。一些在算法和思维过程方面相似但更“严重”的问题的例子如下:
发布于 2014-01-27 13:03:18
是的,他们是。我同意布朗博士的意见,我想补充一些问题。ACM的ICPC)除了数学技能之外,你还在练习你的能力来模拟一个问题,写一个算法,等等。
虽然大多数正式提交的解决方案可能都是肮脏的黑客,因为时间限制,您可以采取您的时间和解决问题的最佳和优雅的方式。
https://softwareengineering.stackexchange.com/questions/225616
复制相似问题