Почему я получаю ошибку во время выполнения в пробке кода Google? - PullRequest
0 голосов
/ 04 апреля 2020

Vestigium означает «след» на латыни. В этой задаче мы работаем с латинскими квадратами и матричными трассами. Трасса квадратной матрицы представляет собой сумму значений на главной диагонали (которая проходит от верхнего левого угла до нижнего правого). Квадратная матрица размером N на N является латинским квадратом, если каждая ячейка содержит одно из N различных значений, и никакое значение не повторяется в строке или столбце. В этой задаче мы будем иметь дело только с «натуральными латинскими квадратами», в которых значения N являются целыми числами от 1 до N. Учитывая матрицу, которая содержит только целые числа от 1 до N, мы хотим вычислить ее трассу и проверить, является ли она естественный латинский квадрат. Чтобы дать некоторую дополнительную информацию, вместо того, чтобы просто сказать нам, является ли матрица натуральным латинским квадратом или нет, вычислите число строк и количество столбцов, которые содержат повторяющиеся значения.

Он выполняется в Intellij

class Main 
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        int T=sc.nextInt();
        for(int z=1;z<=T;z++)
        {

            int size=sc.nextInt();
            int mat[][]=new int[size][size];

            for(int i=0;i<size;i++)
            {
                for(int j=0;j<size;j++)
                {
                    mat[i][j]=sc.nextInt();
                }
            }

            int k=trace(mat,size);

            int r=row_duplicate(mat,size);

            int c=col_duplicate(mat,size);

            System.out.println("Case #" +z+ ":"+" " +k+ " " +r+ " " +c); //Case #1: 4 0 0
        }
    }

    public static int trace(int arr[][],int size)
    {
        int sum=0;
        for(int i=0;i<size;i++)
        {
            for(int j=0;j<size;j++)
            {
                if(i==j)
                    sum=sum+arr[i][j];
            }
        }
        return sum;
    }
    public static int row_duplicate(int arr[][],int size)
    {
        Hashtable<Integer,Integer> h=new Hashtable<>();
        int count=0;
        for(int i=0;i<size;i++)
        {
            int row[]=arr[i];
            for(int j=0;j<row.length;j++)
            {
                if(h.containsKey(row[j]))
                {
                    count++;
                    break;
                }
                else
                {
                    h.put(row[j],1);
                }
            }
            h.clear();
        }
        return count;
    }

    public static int col_duplicate(int arr[][],int size)
    {
        Hashtable<Integer,Integer> h=new Hashtable<>();
        int count=0;
        for(int i=0;i<size;i++)
        {
            for(int j=0;j<size;j++)
            {
                int ele=arr[j][i];
                if(h.containsKey(ele))
                {
                    count++;
                    break;
                }
                else
                {
                    h.put(ele,1);
                }
            }
            h.clear();
        }
        return count;
    }
}

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

Я думаю, вы должны упомянуть имя вашего класса «Решение». для получения дополнительной информации go по ссылке

0 голосов
/ 05 апреля 2020

здесь - реализация кода python, она работает для всех тестовых случаев, не стесняйтесь спрашивать, если у вас возникла проблема

T = int(input())
for i in range(1,T+1):
    size=int(input())
    column =[]
    r = 0
    c = 0
    k = 0
    for a in range(size):
        row = list(map(int,input().split()))
        column.append(row)
    for q in range(size):
        k=k+column[q][q]
    for q in column:
        for z in q:
            if q.count(z)>1:
                r = r+1
                break
    column = [[column[j][i] for j in range(len(column))] for i in range(len(column[0]))]

    for q in column:
        for z in q:
            if q.count(z)>1:
                c = c+1
                break
    i=str(i)
    print("Case #"+i+":",k,r,c)
0 голосов
/ 04 апреля 2020

Проблема в том, что вы неправильно импортируете класс Scanner. Добавьте эту строку вверху: import java.util.*;

...