在含有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
最后谢谢网友的评论,希望我的答复你会满意!
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
最后谢谢网友的评论,希望我的答复你会满意!
相关文章推荐
- 编写程序从键盘得到三个整数,找出其中的最大数(升级版)
- 程序员面试金典——解题总结: 9.17中等难题 17.8给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和
- 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。
- 编写程序从键盘得到三个整数,找出其中的最大数
- n个整数中找出连续m个数加和是最大
- 定义一个方法找出输入的三个整数的最大值
- n个整数中找出连续m个数加和是最大Python版
- n个整数中找出连续m个数加和是最大Java版
- 第七周项目三 找出三个整数中的最大值
- 【Leetcode】寻找数串中连续最大整数和且最大长度的子串
- 164. Maximum Gap *HARD* -- 无序数组找出排序后连续元素的最大间隔
- 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。
- 对于任意正整数都可以找出至少一串连续奇数,它们的和等于该整数的立方。以下程序验证[2,20]之间的数满足这一性质。
- 满大街都是这种烂题目------从100亿个整数中找出最大的1000个整数
- 最大公约数的三种算法(欧几里得递归算法、连续整数检测算法、公共质因数相乘算法)
- 有三个整数,获取最大值,通过三元运算符完成。
- YTUOJ-从三个数中找出最大的数(带参数的宏)
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- c语言初步经典题6----求三个整数中的最大值
- 第九周项目五 b 输入10个整数,找出最大的