鱼C论坛

 找回密码
 立即注册
查看: 1650|回复: 1

求助数组编程题

[复制链接]
发表于 2021-11-9 19:46:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在本题中,你需要为每一个单元格统计出它周围的一样数字的个数,
每个单元格只统计上,下,左,右四个单元格,且每组测试样例都为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[4][4];
                int i,j;
                Scanner sc=new Scanner(System.in);
                
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                                m[i][j]=sc.nextInt();
                        }
                }
                /*
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                                if(j==0) {
                                        System.out.print(m[i][j]);
                                }
                                else {
                                        System.out.print(" "+m[i][j]);
                                }
                                
                                if(j==3) {
                                        System.out.println();
                                }
                        }
                }*/
                int [][] res= new int [4][4];
                
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                                int count;
                                //四个角的
                                if(i==0&&j==0) {//[0][0]
                                        count=0;
                                        if(m[i][j]==m[i][j+1]) count++;
                                        if(m[i][j]==m[i+1][j]) count++;
                                        res[i][j]=count;
                                }
                                else if(i==0&&j==3) {//[0][3] 
                                        count=0;
                                        if(m[i][j]==m[i][j-1]) count++;
                                        if(m[i][j]==m[i+1][j]) count++;
                                        res[i][j]=count;
                                }
                                else if(i==3&&j==0) {//[3][0] 
                                        count=0;
                                        if(m[i][j]==m[i][j+1]) count++;
                                        if(m[i][j]==m[i-1][j]) count++;
                                        res[i][j]=count;
                                }
                                else if(i==3&&j==3) {//[3][3] 
                                        count=0;
                                        if(m[i][j]==m[i][j-1]) count++;
                                        if(m[i][j]==m[i-1][j]) count++;
                                        res[i][j]=count;
                                }
                                //第一行 不是第一列和最后一列的元素
                                else if(i==0&&(j==1||j==2)) {//[0][1]  [0][2] 
                                        if(j==1) {
                                                count=0;
                                                if(m[i][j]==m[i][j-1]) count++;
                                                if(m[i][j]==m[i][j+1]) count++;
                                                if(m[i][j]==m[i+1][j]) count++;
                                                res[i][j]=count;
                                        }
                                        else if(j==2) {
                                                count=0;
                                                if(m[i][j]==m[i][j-1]) count++;//和左右下比
                                                if(m[i][j]==m[i][j+1]) count++;
                                                if(m[i][j]==m[i+1][j]) count++;
                                                res[i][j]=count;
                                        }
                                }
                                //最后一行
                                else if(i==3&&(j==1||j==2)) {//[3][1]  [3][2] 
                                        if(j==1) {
                                                count=0;
                                                if(m[i][j]==m[i][j-1]) count++;
                                                if(m[i][j]==m[i][j+1]) count++;
                                                if(m[i][j]==m[i-1][j]) count++;
                                                res[i][j]=count;
                                        }
                                        else if(j==2) {
                                                count=0;
                                                if(m[i][j]==m[i][j-1]) count++;//和左右下比
                                                if(m[i][j]==m[i][j+1]) count++;
                                                if(m[i][j]==m[i-1][j]) count++;
                                                res[i][j]=count;
                                        }
                                }
                                //第一列
                                else if(j==0&&(i==1||i==2)) {
                                        if(i==1) {
                                                count=0;
                                                if(m[i][j]==m[i+1][j]) count++;
                                                if(m[i][j]==m[i-1][j]) count++;
                                                if(m[i][j]==m[i][j+1]) count++;
                                                res[i][j]=count;
                                        }
                                        else if(i==2) {
                                                count=0;
                                                if(m[i][j]==m[i+1][j]) count++;
                                                if(m[i][j]==m[i-1][j]) count++;
                                                if(m[i][j]==m[i][j+1]) count++;
                                                res[i][j]=count;
                                        }
                                }
                                //最后列
                                else if(j==3&&(i==1||i==2)) {
                                        if(i==1) {
                                                count=0;
                                                if(m[i][j]==m[i+1][j]) count++;
                                                if(m[i][j]==m[i-1][j]) count++;
                                                if(m[i][j]==m[i][j-1]) count++;
                                                res[i][j]=count;
                                        }
                                        else if(i==2) {
                                                count=0;
                                                if(m[i][j]==m[i+1][j]) count++;
                                                if(m[i][j]==m[i-1][j]) count++;
                                                if(m[i][j]==m[i][j-1]) count++;
                                                res[i][j]=count;
                                        }
                                }
                                else {
                                        count=0;
                                        if(m[i][j]==m[i][j-1]) count++;//和左右上下比
                                        if(m[i][j]==m[i][j+1]) count++;
                                        if(m[i][j]==m[i-1][j]) count++;
                                        if(m[i][j]==m[i+1][j]) count++;
                                        res[i][j]=count;
                                }
                                
                                
                }}
                for(i=0;i<4;i++) {
                        for(j=0;j<4;j++) {
                                if(j==0) {
                                        System.out.print(res[i][j]);
                                }
                                else {
                                        System.out.print(" "+res[i][j]);
                                }
                                
                                if(j==3) {
                                        System.out.println();
                                }
                        }
                }
                
}
}

我的方法:用Java写的,和C没有区别。
if-else 分类讨论一下四个角的元素和首行首列的元素,再把其他元素上下左右相邻的都讨论一遍,感觉方法好笨,代码冗余,有没有好一点的实现方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-9 20:14:31 | 显示全部楼层
本帖最后由 jhq999 于 2021-11-10 05:40 编辑
例如:数组[8][9],数组2[8][9]={0};
[i][j]=>[i-1][j],[i][j-1],[i+1][j],[i][j+1];
范围(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(数组[i+1][j]==数组[i][j])数组2[i][j]++;
  if(i-1)>=0)if(数组[i-1][j]==数组[i][j])数组2[i][j]++;
  if(j-1)>=0)if(数组[i][j-1]==数组[i][j])数组2[i][j]++;
  if(j+1)<9)if(数组[i][j+1]==数组[i][j])数组2[i][j]++;
}
}
输出数组2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 23:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表