您的位置:首页 > 其它

在含有0的一百个整数中,找出连续三个数之和最大的部分

2009-03-02 15:31 295 查看
一、思路

1、记录前三个数的和,从第一个数开始,计算后三个数与前三个数的差值,当差值为正时 记录位置,

当差值为负时继续向后移动,直至为正。

2、代码

1 /*

2 * Author:Brucegao

3 * Time:2009.03.02

4 * Function:Containing negative integer 100 to identify the largest part of the three number

5 */

6 using System;

7 using System.Collections.Generic;

8 using System.Text;

9

namespace MaxThreeNumber2

{

class Program

{

/// <summary>

/// Initialization a radom array with in 100

/// </summary>

/// <param name="arr"></param>

public static void Init(int[] arr)

{

Random rad = new Random();

for (int i = 0; i < 100; i++)

{

arr[i] = rad.Next(100);

}

for (int i = 0; i < arr.Length; i++)

{

Console.WriteLine(i + ":" + arr[i]);

}

}

/// <summary>

/// get the largest three number

/// </summary>

/// <param name="arr"></param>

/// <returns></returns>

public static int GetMaxSum(int[] arr)

{

int index = 0; //position of element of radom array

int sum = arr[0] + arr[1] + arr[2];

//value of substraction which the adding value of current three number substact the even largest one

int d = 0;

for (int i = 3; i < arr.Length; i++)

{

d += arr[i] - arr[i - 3];

if (d > 0)

{

sum += d;

index = i - 2;

d = 0;

}

}

return index;

}

static void Main(string[] args)

{

int[] arr = new int[100];

Init(arr);

int index = GetMaxSum(arr);

Console.WriteLine("Position:"+index+","+(index+1)+","+(index+2));

int value=arr[index]+arr[index+1]+arr[index+2];

Console.WriteLine("Value:"+value);

Console.ReadKey();

}

}

}

三、结果



回复评论:

1、首先算法思路是这样的:从第一个数开始计算连续后三个数与前三个数的差,当差值为正数,就把标识位移动到差值为正的三个数的第一个数上面

2、下面评论所说的是六个数,好这是我把上面的代码改为六个数的结果:

(1)



(2)



(3)



可以看出上面的找出的连续的三个数都是正确的位置和三个数的和。

3、现在我把随机的数改为评论上所说的六个数试试:

public static int GetMaxSum(int[] arr)

{

int index = 0; //position of element of radom array

int sum = arr[0] + arr[1] + arr[2];

//value of substraction which the adding value of current three number substact the even largest one

int d = 0;

for (int i = 3; i < arr.Length; i++)

{

d += arr[i] - arr[i - 3];

if (d > 0)

{

sum += d;

index = i - 2;

d = 0;

}

}

return index;

}

static void Main(string[] args)

{

int[] arr = new int[6] { 19, 41, 49, 86, 20, 50 };

//Init(arr);

int index = GetMaxSum(arr);

Console.WriteLine("Position:"+index+","+(index+1)+","+(index+2));

int value=arr[index]+arr[index+1]+arr[index+2];

Console.WriteLine("Value:"+value);

Console.ReadKey();

}
输出结果:



可以很明显的看出:结果是正确的而且评论的加法是错误的,正确的是:41+49+86=176

最后谢谢网友的评论,希望我的答复你会满意!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐