zmLau0727 发表于 2019-11-8 23:17:12

该如何选出一个二维数组中相同的数呢

该怎么选出一个二位数组中的相同的书呢,比如这样一个二位数组,我该怎么选出所有相邻而且相等的数呢,然后把相同的换成0;类似消消乐游戏那样
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3
输出是这样的
2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0

jackz007 发表于 2019-11-8 23:17:13

本帖最后由 jackz007 于 2019-11-10 00:32 编辑

zmLau0727 发表于 2019-11-10 00:02
这个还是有点问题啊,按照题目要求这个第9行的1和第11行的1也得被替换成0

      现在再看呢?

#include <stdio.h>
int main(void)
{
      int d = {{2 , 2 , 3 , 1 , 2} ,\
                     {3 , 1 , 1 , 1 , 1} ,\
                     {2 , 3 , 2 , 1 , 3} ,\
                     {2 , 2 , 3 , 3 , 3}}                                       ;
      int c , e , i , j , k                                                 ;
      for(i = 0 ; i < 4 ; i ++) for(j = 0 ; j < 5 ; j ++) e = d       ;
      for(i = 0 ; i < 4 ; i ++) {
                for(c = 1 , j = 1 ; j < 5 ; j ++) {
                        if(d == d) {
                              c ++                                                ;
                        } else {
                              if(c > 2) for(k = j - c ; k < j ; k ++) e = 0 ;
                              c = 1                                             ;
                        }
                }
                if(c > 2) for(k = j - c ; k < j ; k ++) e = 0               ;
      }
      for(j = 0 ; j < 5 ; j ++) {
                for(c = 1 , i = 1 ; i < 4 ; i ++) {
                        if(d == d) {
                              c ++                                                ;
                        } else {
                              if(c > 2) for(k = i - c ; k < i ; k ++) e = 0 ;
                              c = 1                                             ;
                        }
                }
                if(c > 2) for(k = i - c ; k < i ; k ++) e = 0               ;
      }
      for(i = 0 ; i < 4 ; i ++) {
                for(j = 0 ; j < 5 ; j ++) printf("\t%d" , d)                  ;
                printf("\n")                                                      ;
      }
      printf("\n")                                                                ;
      for(i = 0 ; i < 4 ; i ++) {
                for(j = 0 ; j < 5 ; j ++) printf("\t%d" , e)                  ;
                printf("\n")                                                      ;
      }
}
      编译和运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
      2       2       3       1       2
      3       1       1       1       1
      2       3       2       1       3
      2       2       3       3       3

      2       2       3       0       2
      3       0       0       0       0
      2       3       2       0       3
      2       2       0       0       0

C:\Bin>

Croper 发表于 2019-11-9 00:32:57

誊写到另外一个二维数组里,誊写的时候判断是否有相邻就行
#include <iostream>
#include <vector>

using namespace std;

vector<vector<int>> SetConnectedNumZero(const vector<vector<int>>& v) {
        if (v.empty() || v.empty()) return {};
        int cy = v.size();
        int cx = v.size();
        vector<vector<int>> ret(cy, vector<int>(cx));
        for (int y = 0; y < cy; ++y) {
                for (int x = 0; x < cx; ++x) {
                        int n = v;
                        if (
                                x > 0 && n == v ||
                                x < cx - 1 && n == v ||
                                y > 0 && n == v ||
                                y < cy - 1 && n == v)
                        {
                                ret = 0;
                        }
                        else {
                                ret = v;
                        }
                }
        }
        return ret;
}


zmLau0727 发表于 2019-11-9 09:40:29

Croper 发表于 2019-11-9 00:32
誊写到另外一个二维数组里,誊写的时候判断是否有相邻就行

你这用的什么语言写的呀,我有点看不懂

18084041536 发表于 2019-11-9 11:23:05

zmLau0727 发表于 2019-11-9 09:40
你这用的什么语言写的呀,我有点看不懂

用的C++

jackz007 发表于 2019-11-9 14:25:38

本帖最后由 jackz007 于 2019-11-9 16:11 编辑

#include <stdio.h>
int main(void)
{
      int d = {{2 , 2 , 3 , 1 , 2} ,\
                     {3 , 1 , 1 , 1 , 1} ,\
                     {2 , 3 , 2 , 1 , 3} ,\
                     {2 , 2 , 3 , 3 , 3}}                                       ;
      int c , e , i , j , k                                                 ;
      for(i = 0 ; i < 4 ; i ++) for(j = 0 ; j < 5 ; j ++) e = d       ;
      for(i = 0 ; i < 4 ; i ++) {
                for(c = 1 , j = 1 ; j < 5 ; j ++) {
                        if(e == e) {
                              c ++                                                ;
                        } else {
                              if(c > 2) for(k = j - c ; k < j ; k ++) e = 0 ;
                              c = 1                                             ;
                        }
                }
                if(c > 2) for(k = j - c ; k < j ; k ++) e = 0               ;
      }
      for(i = 0 ; i < 4 ; i ++) {
                for(j = 0 ; j < 5 ; j ++) printf("\t%d" , d)                  ;
                printf("\n")                                                      ;
      }
      printf("\n")                                                                ;
      for(i = 0 ; i < 4 ; i ++) {
                for(j = 0 ; j < 5 ; j ++) printf("\t%d" , e)                  ;
                printf("\n")                                                      ;
      }
}
      编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
      2       2       3       1       2
      3       1       1       1       1
      2       3       2       1       3
      2       2       3       3       3

      2       2       3       1       2
      3       0       0       0       0
      2       3       2       1       3
      2       2       0       0       0

C:\Bin>

zmLau0727 发表于 2019-11-10 00:02:28

jackz007 发表于 2019-11-9 14:25
编译、运行实况:

这个还是有点问题啊,按照题目要求这个第9行的1和第11行的1也得被替换成0

zmLau0727 发表于 2019-11-10 12:32:23

jackz007 发表于 2019-11-8 23:17
现在再看呢?




谢谢,我才发现我把题给理解错了,你写的这个符合要求

zmLau0727 发表于 2019-11-10 13:15:19

jackz007 发表于 2019-11-9 14:25
编译、运行实况:

能麻烦你注释一下代码吗

jackz007 发表于 2019-11-10 13:58:47

zmLau0727 发表于 2019-11-10 13:15
能麻烦你注释一下代码吗

#include <stdio.h>
int main(void)
{
      int d = {{2 , 2 , 3 , 1 , 2} ,\
                     {3 , 1 , 1 , 1 , 1} ,\
                     {2 , 3 , 2 , 1 , 3} ,\
                     {2 , 2 , 3 , 3 , 3}}                                       ;
      int c , e , i , j , k                                                 ;

/* 把 d 复制到 e 中,因为 e 要动态修改,所以,d 作为参考非常必要 */
      for(i = 0 ; i < 4 ; i ++) for(j = 0 ; j < 5 ; j ++) e = d       ;
/* 按行的方向扫描相邻相等的元素并计数、删除 */
      for(i = 0 ; i < 4 ; i ++) {                                                    // 4 行
                for(c = 1 , j = 1 ; j < 5 ; j ++) {                                    // 5 列
                        if(d == d) {                                 // 如果同行相邻元素相等
                              c ++                                                ;// 重复元素计数
                        } else {                                                       // 否则,相邻元素不相等
                              if(c > 2) for(k = j - c ; k < j ; k ++) e = 0 ;// 如果有相等元素计数就悉数就置 0
                              c = 1                                             ;// 重新初始化重复元素计数器
                        }
                }
                if(c > 2) for(k = j - c ; k < j ; k ++) e = 0               ;// 行结束,如果有相等元素计数就悉数就置 0
      }
/* 按列的方向扫描相邻相等的元素并计数、删除 */
      for(j = 0 ; j < 5 ; j ++) {                                                    // 5 列
                for(c = 1 , i = 1 ; i < 4 ; i ++) {                                    // 4 行
                        if(d == d) {                                 // 如果同列相邻元素相等
                              c ++                                                ;// 重复元素计数
                        } else {                                                       // 否则,相邻元素不相等
                              if(c > 2) for(k = i - c ; k < i ; k ++) e = 0 ;// 如果有相等元素计数就悉数就置 0
                              c = 1                                             ;// 重新初始化重复元素计数器
                        }
                }
                if(c > 2) for(k = i - c ; k < i ; k ++) e = 0               ;// 列结束,如果有相等元素计数就悉数就置 0
      }
/* 打印原始输出数组 d */
      for(i = 0 ; i < 4 ; i ++) {
                for(j = 0 ; j < 5 ; j ++) printf("\t%d" , d)                  ;
                printf("\n")                                                      ;
      }
      printf("\n")                                                                ;
/* 打印删除了重复元素的数组 e */
      for(i = 0 ; i < 4 ; i ++) {
                for(j = 0 ; j < 5 ; j ++) printf("\t%d" , e)                  ;
                printf("\n")                                                      ;
      }
}

zmLau0727 发表于 2019-11-10 14:17:49

jackz007 发表于 2019-11-10 13:58


看懂了,谢谢
页: [1]
查看完整版本: 该如何选出一个二维数组中相同的数呢