你好我正在练习一些编码(黑客等级挑战),但我没有构建一个基本的逻辑,我觉得我好像在寻找一些非常简单的东西。 我的程序的目的是给定一个6 x 6的数组作为输入我计算每个沙漏总和并仅显示最大总和。 数组的输入范围为-9到9(含)。 所以如果我的输入数组是
7 8 9 1 2 3
5 6 7 3 4 2
7 9 5 1 3 5
7 9 5 2 1 1
9 5 3 1 3 3
7 6 1 3 5 8
它应显示所有计算的沙漏的最大总和。沙漏的一个例子是
7 8 9
... 6
7 9 5
这也恰好是此特定数组中的最高总和(51)。 我面临的问题是当我的所有输入都是负数时显示最大总和。
-1 -1 0 -9 -2 -2
-2 -1 -6 -8 -2 -5
-1 -1 -1 -2 -3 -4
-1 -9 -2 -4 -4 -5
-7 -3 -3 -2 -9 -9
-1 -3 -1 -2 -4 -5
这就是我未能通过测试案例的阵列。所以在我的代码中,当我声明我的变量当前总和和最大值时,我将它们都初始化为零。在计算每个和之后,我检查我的当前总和是否大于我的最大总和,但是,在所有负整数的情况下,当我的当前总和已经小于最大总和时,它将永远不会进入那个if语句如果我的当前金额已经小于零,我还是没有看到我应该提供什么样的配对条件。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
namespace C_hash_Tutorials
{
class HackerRank_Day11
{
static void Main(string[] args)
{
int[][] arr = new int[6][];
string[] arr_temp;
int arr_i = 0;
int curr_sum = 0;
int max_sum = 0;
for (arr_i = 0; arr_i < 6; arr_i++)
{
arr_temp = Console.ReadLine().Split(' ');
arr[arr_i] = Array.ConvertAll(arr_temp, Int32.Parse);
}
for (int x = 0; x < arr.Length-2; x++)
{
for (int y = 0; y < arr.Length-2; y++)
{
curr_sum = arr[x][y] + arr[x][y + 1] + arr[x][y + 2] + arr[x + 1][y + 1] + arr[x + 2][y] + arr[x + 2][y + 1] + arr[x + 2][y + 2];
Console.WriteLine(curr_sum);
if (curr_sum > max_sum)
{
max_sum = curr_sum;
}
}
}
Console.WriteLine(max_sum);
Console.ReadLine();
}
}
}
答案 0 :(得分:2)
我认为您所要做的就是尽量初始化max_sum
:
int curr_sum = 0;
int max_sum = int.MinValue;
...
答案 1 :(得分:1)
当解决这些问题(总结某种小时眼镜)时,第一个意图是生成这些小时眼镜作为分开的例程 :
private static IEnumerable<T[]> HourGlasses<T>(T[][] source) {
if (null == source)
yield break;
for (int r = 0; r < source.Length - 2; ++r) {
T[] top = source[r];
T[] middle = source[r + 1];
T[] bottom = source[r + 2];
int n = Math.Min(Math.Min(top.Length - 2, bottom.Length - 2), middle.Length - 1);
for (int i = 0; i < n; ++i)
yield return new T[] {
top[i], top[i + 1], top[i + 2],
middle[i + 1],
bottom[i], bottom[i + 1], bottom[i + 2], };
}
}
提取方法,您可以轻松回答您的问题:
int[][] arr = ...
...
int max = HourGlasses(arr) // extract each hour glass
.Select(hourGlass => hourGlass.Sum()) // sum up items within each hour glass
.Max(); // return the max of these sums
请注意,现在您可以轻松找到 Min , ArgMax (哪个沙漏具有最大金额)等。