停车位在拉丁语中表示“跟踪”。
方阵的轨迹是主对角线(从左上角到右下角)上的值之和。
如果每个单元格包含N个不同值之一,并且在行或列内不重复任何值,则N×N方阵是拉丁方阵。在此问题中,我们将仅处理“自然拉丁方”,其中N值为1到N之间的整数。
给定一个仅包含1到N之间的整数的矩阵,我们要计算其轨迹并检查它是否为自然的拉丁方。为了提供更多的信息,请简单地计算包含重复值的行数和列数,而不是简单地告诉我们矩阵是否是自然的拉丁方。
import java.io.*;
import java.util.*;
class Solution
{
public static void main(String args[])
{
Scanner sc=new Scanner(new BufferedReader(new InputStreamReader(System.in)));
int T,N,matrix[][],dupCheck[];
int i,j,k,r,c,Sum;
String inMat[];
dupCheck=new int[100];
T=Integer.parseInt(sc.nextLine());
for(k=1;k<=T;k++,matrix=null)
{
N=Integer.parseInt(sc.nextLine());
matrix=new int[N][N];
for(i=0,r=0;i<N;i++)
{
inMat=(sc.nextLine()).split(" ");
Arrays.fill(dupCheck,0);
for(j=0;j<N;j++)
{
matrix[i][j]=Integer.parseInt(inMat[j]);
dupCheck[matrix[i][j]]++;
}
for(j=0;j<100;j++)
{
if(dupCheck[j]>1)
{
r++;
break;
}
}
}
for(i=0,Sum=0;i<N;i++) Sum+=matrix[i][i];
for(i=0,c=0;i<N;i++)
{
Arrays.fill(dupCheck,0);
for(j=0;j<N;j++)
{
dupCheck[matrix[j][i]]++;
}
for(j=0;j<100;j++)
{
if(dupCheck[j]>1)
{
c++;
break;
}
}
}
System.out.println("Case #"+k+": "+Sum+" "+r+" "+c);
}
}
}
它在IDE中运行良好,并且给出了正确答案。 但是提交时出现运行时错误。
答案 0 :(得分:0)
出现运行时错误是因为您的代码在第一种情况下有效,然后给出了答案。然后,当我们输入另一个案例时,它也会给出答案。但是Google会立即输入所有案件,然后您需要以单行形式给出所有案件的答案。
答案 1 :(得分:-1)
尝试添加sc.close();在关闭主方法之前。