零的执行人 发表于 2021-11-9 19:46:10

求助数组编程题

在本题中,你需要为每一个单元格统计出它周围的一样数字的个数,
每个单元格只统计上,下,左,右四个单元格,且每组测试样例都为4*4矩阵,
如下图,
输入样例为
2 2 4 4
2 3 5 7
4 3 5 8
4 5 8 8
输出结果为
2 1 1 1
1 1 1 0
1 1 1 1
1 0 1 2


package practice1109;

import java.util.Scanner;

public class Matrix01 {
      public static void main(String[] args) {
                // TODO Auto-generated method stub
                int[][] m=new int;
                int i,j;
                Scanner sc=new Scanner(System.in);
               
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                              m=sc.nextInt();
                        }
                }
                /*
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                              if(j==0) {
                                        System.out.print(m);
                              }
                              else {
                                        System.out.print(" "+m);
                              }
                              
                              if(j==3) {
                                        System.out.println();
                              }
                        }
                }*/
                int [][] res= new int ;
               
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                              int count;
                              //四个角的
                              if(i==0&&j==0) {//
                                        count=0;
                                        if(m==m) count++;
                                        if(m==m) count++;
                                        res=count;
                              }
                              else if(i==0&&j==3) {//
                                        count=0;
                                        if(m==m) count++;
                                        if(m==m) count++;
                                        res=count;
                              }
                              else if(i==3&&j==0) {//
                                        count=0;
                                        if(m==m) count++;
                                        if(m==m) count++;
                                        res=count;
                              }
                              else if(i==3&&j==3) {//
                                        count=0;
                                        if(m==m) count++;
                                        if(m==m) count++;
                                        res=count;
                              }
                              //第一行 不是第一列和最后一列的元素
                              else if(i==0&&(j==1||j==2)) {//
                                        if(j==1) {
                                                count=0;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                                        else if(j==2) {
                                                count=0;
                                                if(m==m) count++;//和左右下比
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                              }
                              //最后一行
                              else if(i==3&&(j==1||j==2)) {//
                                        if(j==1) {
                                                count=0;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                                        else if(j==2) {
                                                count=0;
                                                if(m==m) count++;//和左右下比
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                              }
                              //第一列
                              else if(j==0&&(i==1||i==2)) {
                                        if(i==1) {
                                                count=0;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                                        else if(i==2) {
                                                count=0;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                              }
                              //最后列
                              else if(j==3&&(i==1||i==2)) {
                                        if(i==1) {
                                                count=0;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                                        else if(i==2) {
                                                count=0;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                if(m==m) count++;
                                                res=count;
                                        }
                              }
                              else {
                                        count=0;
                                        if(m==m) count++;//和左右上下比
                                        if(m==m) count++;
                                        if(m==m) count++;
                                        if(m==m) count++;
                                        res=count;
                              }
                              
                              
                }}
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                              if(j==0) {
                                        System.out.print(res);
                              }
                              else {
                                        System.out.print(" "+res);
                              }
                              
                              if(j==3) {
                                        System.out.println();
                              }
                        }
                }
               
}
}


我的方法:用Java写的,和C没有区别。
if-else 分类讨论一下四个角的元素和首行首列的元素,再把其他元素上下左右相邻的都讨论一遍,感觉方法好笨,代码冗余,有没有好一点的实现方法{:10_266:}

jhq999 发表于 2021-11-9 20:14:31

本帖最后由 jhq999 于 2021-11-10 05:40 编辑

例如:数组,数组2={0};
=>,,,;
范围(8>i+1 ,i-1>=0,j-1>=0,j+1<9;
for(i=0;i<8;i++)
{
   for(j=0;j<9;j++)
{
   if(i+1<8)if(数组==数组)数组2++;
if(i-1)>=0)if(数组==数组)数组2++;
if(j-1)>=0)if(数组==数组)数组2++;
if(j+1)<9)if(数组==数组)数组2++;
}
}
输出数组2
页: [1]
查看完整版本: 求助数组编程题