您的位置:首页 > 其它

矩阵输出

2015-10-21 23:34 357 查看
题目:

如果一个矩阵中的某一行或者某一列和对角线的元素相同,就输出对应位置上的元素。

思路:

先处理行,判断每一行是否有重复,然后如果都相同,放到一个新数组中即可

缺点就是多申请了一个额外的空间

public class Soultion{

public static void sop(int [][] num)
{

for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(num[i][j]!=-1)
System.out.print(num[i][j]+" ");
else
System.out.print(" ");
}
System.out.println();
}
}

public static void main(String[] args) {

int[][] num ={

{1,1,1 },
{1,1,0 },
{1,0,1 },

};

int[][] newnum={
{-1,-1,-1 },
{-1,-1,-1 },
{-1,-1,-1 },

};
int row = 3;
int col = 3;
//行
for(int i =0;i<row;i++)
{
int [] temp = new int[col];
int index=0;
boolean flag=false;
for(int j=0;j<col-1;j++)
{
if(j==0)temp[index++]=num[i][j];
if(num[i][j]!=num[i][j+1])
{
flag=true;
break;
}
else
{
temp[index++]=num[i][j+1];
}
}
//如果都相等,放入新的二维数组
if(flag==false)
{
for(int k=0;k<col;k++)
{
newnum[i][k]=temp[k];
}
}
}

//列
for(int j=0;j<col;j++)
{
int [] tempCol = new int[row];
int index2 = 0;
boolean flag =false;
for(int i=0;i<row-1;i++)
{
if(i==0)tempCol[index2++]=num[i][j];
if(num[i][j]!=num[i+1][j])
{
flag=true;
break;
}
else
{
tempCol[index2++]=num[i+1][j];
}
}

if(flag==false)
{
for(int k=0;k<row;k++)
{
newnum[k][j] = tempCol[k];
}
}
}

//左对角线
int [] temp = new int[row]; int index=0; boolean flag=false;
for(int i=0,j=0;i<row-1&&j<col-1;i++,j++)
{

if(i==0&&j==0)
{
temp[index++] = num[i][j];
}
if(num[i][j] != num[i+1][j+1])
{
flag=true;
break;
}
else
{
temp[index++]=num[i+1][j+1];

}
}
//放左对角线
if(flag==false)
{
for(int k=0;k<row;k++)
{
newnum[k][k]=temp[k];
}
}

//右对角线
int [] tempRight = new int[row]; int index2=0; boolean flag2=false;
for(int i=0,j=col-1;i<row-1&&j>0;i++,j--)
{

if(i==0&&j==col-1)
{
tempRight[index2++] = num[i][j];
}
if(num[i][j] != num[i+1][j-1])
{
flag2=true;
break;
}
else
{
tempRight[index2++]=num[i+1][j-1];

}
}
if(flag==false)
{ //放右对角线
for(int k=0;k<row;k++)
{
newnum[k][k]=tempRight[k];
}
}
sop(newnum);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: