闲来无聊,搜索“算法题”,结果如下(原文 http://www.cnblogs.com/grenet/archive/2010/02/21/1670208.html ):
题目:有31,-41,59,26,-53,58,97,-93,-23,84十个数。SUM(N,M)表示从第N个数到到第M个数的和。例如:SUM(2,3)=-41+59=18。问:最大的和是多少?对应的N和M是多少?
首先,我自己空中楼阁的想法:
因为是次第的加,所以 N 与 M 分开考虑。
首先判断第M+1个数是否为正数,为正数则M=M+1。若不为正数则继续向后看,第M+2个数是否为正数,如果为正数,就判断这两个数加起来是否为正数,为正数则M=M+2。以此类推,算出M最大值。
设一个递增的非负整数Y,且Y<M+1,并判断第N+Y个数是否为正数,若为正数,则N=N。若第N+Y个数为负数,则计算SUM(N,N+Y)是否为正数,若为正数,则Y继续递增,若为负数,则N=N+Y+1,Y归最小,继续判断。
M与N的计算都是从1开始的。
口算答案:M=7,N=3
后来我发现自己判断了很多次,对人来说,思考是很简单的,但对于写成编程语言就……我想我的思考方式还是“计算人”,而不是“计算机”吧。
题目:有31,-41,59,26,-53,58,97,-93,-23,84十个数。SUM(N,M)表示从第N个数到到第M个数的和。例如:SUM(2,3)=-41+59=18。问:最大的和是多少?对应的N和M是多少?
首先,我自己空中楼阁的想法:
因为是次第的加,所以 N 与 M 分开考虑。
首先判断第M+1个数是否为正数,为正数则M=M+1。若不为正数则继续向后看,第M+2个数是否为正数,如果为正数,就判断这两个数加起来是否为正数,为正数则M=M+2。以此类推,算出M最大值。
设一个递增的非负整数Y,且Y<M+1,并判断第N+Y个数是否为正数,若为正数,则N=N。若第N+Y个数为负数,则计算SUM(N,N+Y)是否为正数,若为正数,则Y继续递增,若为负数,则N=N+Y+1,Y归最小,继续判断。
M与N的计算都是从1开始的。
口算答案:M=7,N=3
后来我发现自己判断了很多次,对人来说,思考是很简单的,但对于写成编程语言就……我想我的思考方式还是“计算人”,而不是“计算机”吧。

