该如何选出一个二维数组中相同的数呢
该怎么选出一个二位数组中的相同的书呢,比如这样一个二位数组,我该怎么选出所有相邻而且相等的数呢,然后把相同的换成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-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> 誊写到另外一个二维数组里,誊写的时候判断是否有相邻就行
#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;
}
Croper 发表于 2019-11-9 00:32
誊写到另外一个二维数组里,誊写的时候判断是否有相邻就行
你这用的什么语言写的呀,我有点看不懂 zmLau0727 发表于 2019-11-9 09:40
你这用的什么语言写的呀,我有点看不懂
用的C++ 本帖最后由 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> jackz007 发表于 2019-11-9 14:25
编译、运行实况:
这个还是有点问题啊,按照题目要求这个第9行的1和第11行的1也得被替换成0 jackz007 发表于 2019-11-8 23:17
现在再看呢?
谢谢,我才发现我把题给理解错了,你写的这个符合要求 jackz007 发表于 2019-11-9 14:25
编译、运行实况:
能麻烦你注释一下代码吗 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") ;
}
} jackz007 发表于 2019-11-10 13:58
看懂了,谢谢
页:
[1]