首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >沙漏阵列提交误差

沙漏阵列提交误差
EN

Stack Overflow用户
提问于 2016-10-09 12:08:07
回答 6查看 2.4K关注 0票数 1

我试图在hackerrank.you上解决沙漏问题,可以在这里找到问题的细节(https://www.hackerrank.com/challenges/2d-array)。

在我的机器上,代码工作正常,并且给出了正确的结果,即使是在hackerrank上出现错误的测试用例也是如此。

以下是代码:

代码语言:javascript
复制
maxSum = -70
#hourglass = []
arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
for row in range(0,6):
    for col in range(0,6):
        if (row + 2) < 6 and (col + 2) < 6 :
            sum = arr[row][col] + arr[row][col+1] + arr[row][col+2] + arr[row+1][col+1] + arr[row+2][col] + arr[row+2][col+1] + arr[row+2][col+2]
            if sum > maxSum:
                #hourglass.append(arr[row][col])
                #hourglass.append(arr[row][col+1])
                #hourglass.append(arr[row][col+2])
                #hourglass.append(arr[row+1][col+1])
                #hourglass.append(arr[row+2][col])
                #hourglass.append(arr[row+2][col+1])
                #hourglass.append(arr[row+2][col+2])
                maxSum = sum
print(maxSum)
#print(hourglass)

运行代码时出现以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "solution.py", line 4, in <module>
    arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
  File "solution.py", line 4, in <listcomp>
    arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
  File "solution.py", line 4, in <listcomp>
    arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
ValueError: invalid literal for int() with base 10: '1 1 1 0 0 0'

引发错误的测试案例是:

代码语言:javascript
复制
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 9 2 -4 -4 0
0 0 0 -2 0 0
0 0 -1 -2 -4 0 
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-02-17 19:17:10

在C#中,我可以为您提供一个非常简单的解决著名沙漏问题的方法。下面的解决方案已经对10个测试用例进行了测试。

代码语言:javascript
复制
class Class1
{ 
   static int[][] CreateHourGlassForIndexAndSumIt(int p, int q, int[][] arr)
    {
        int[][] hourGlass = new int[3][];

        int x = 0, y = 0;
        for (int i = p; i <= p + 2; i++)
        {
            hourGlass[x] = new int[3];
            int[] temp = new int[3];
            int k = 0;
            for (int j = q; j <= q + 2; j++)
            {
                temp[k] = arr[i][j];
                k++;
            }
            hourGlass[x] = temp;
            x++;
        }

        return hourGlass;
    }

    static int findSumOfEachHourGlass(int[][] arr)
    {
        int sum = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = 0; j < arr.Length; j++)
            {
                if (!((i == 1 && j == 0) || (i == 1 && j == 2)))
                    sum += arr[i][j];
            }

        }

        return sum;
    }

     static void Main(string[] args)
    {
        int[][] arr = new int[6][];
        for (int arr_i = 0; arr_i < 6; arr_i++)
        {
            string[] arr_temp = Console.ReadLine().Split(' ');
            arr[arr_i] = Array.ConvertAll(arr_temp, Int32.Parse);
        }

        int[] sum = new int[16];
        int k = 0;
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                int[][] hourGlass = CreateHourGlassForIndexAndSumIt(i, j, arr);
                sum[k] = findSumOfEachHourGlass(hourGlass);
                k++;
            }
        }
        //max in sum array
        Console.WriteLine(sum.Max());

    }


}

谢谢,Ankit Bajpai

票数 1
EN

Stack Overflow用户

发布于 2017-12-06 10:09:29

Python的解决方案:#!/bin/Python 3

代码语言:javascript
复制
import sys
arr   = []
matt  = []
v_sum = 0
for arr_i in range(6):
   arr_t = [int(arr_temp) for arr_temp in input().strip().split(' ')]
   arr.append(arr_t)
for i in range(len(arr)-2):
    for j in range(len(arr)-2):
        v_sum = arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1] + arr[i+2][j+2]
        matt.append(v_sum)

total = max(matt)
print (total)
票数 2
EN

Stack Overflow用户

发布于 2017-09-21 12:47:07

考虑维数NxN的数组

代码语言:javascript
复制
indexarr = [x for x in xrange(N-2)]    
summ=0
for i in indexarr:
    for j in indexarr:
        for iter_j in xrange(3):
            summ += arr[i][j+iter_j] + arr[i+2][j+iter_j]
        summ += arr[i+1][j+1] 
        if i == 0 and j==0:
            maxm=summ
        if summ > maxm:
            maxm = summ
        summ = 0
print maxm  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39943444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档