问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
这是所运行的程序
#include <iostream>
using namespace std;
//判断每一行中可消除的元素,
//并用指针数组中的指针指向这些元素
static int* clean_Line[30][30]={0};//保存每一行待消除的元素的地址
int* clean_Row[30][30]={0};//保存每一行待消除的元素的地址
void EqualLine(int arr[30][30], int n, int m)
{
int i=0, j=0;
int* temp= &arr[i][j];//第i行,第j列的元素地址
//按行遍历整个数组
for ( i = 0; i < n; i++)//n行循环
{
for ( j = 0; j < m-1; j++)
{
//如果该元素不等于下一个元素
if (arr[i][j] != arr[i][j + 1])
{
temp = &arr[i][j+1];
}
//如果只有两个元素相同
else if (arr[i][j] == arr[i][j + 1] && arr[i][j + 1] != arr[i][j + 2])
{
temp = &arr[i][j+1];
}
//如果出现三个及以上元素相同
else
{
int cnt = 0;
for (int s = 0; temp == (temp + 1); s++,temp++)
{
clean_Line[i][s] = temp;
clean_Line[i][s + 1] = (temp + 1);
cnt++;
}
j = j + cnt - 1;
}
}
}
}
void EqualCol(int arr[30][30], int n, int m)
{
int i=0, j=0;
int* temp=& arr[j][i];//第j行,第i列的元素地址
//按列遍历整个数组
for ( i = 0; i < m; i++)//m列循环
{
for ( j = 0; j < n-1; j++)
{
//如果该元素不等于下一个元素
if (arr[j][i] != arr[j+1][i])
{
temp = &arr[j+1][i];//向下走一列
}
//如果只有两个元素相同
else if (arr[j][i] == arr[j+1][i] && arr[j+1][i] != arr[j+2][i + 2])
{
temp = &arr[j + 1][i];//向下走一列
}
//如果出现三个及以上元素相同
else
{
int cnt = 0;
for (int s = 0; temp == (temp + 1); s++,temp++)
{
clean_Row[s][i] = temp;
clean_Row[s+1][i] = (temp + 1);
}
j = j + cnt - 1;
}
}
}
}
int main()
{
//输入n行m列
int n, m;
cin >> n >> m;
//创建一个足够大的数组作为棋盘
int arr[30][30];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> arr[i][j];
}
}
EqualLine(arr, n, m);
EqualCol(arr, n, m);
for (int s = 0; s < n; s++)
{
for (int t = 0; t < m; t++)
{
* clean_Line[s][t]=0;
}
}
for (int s = 0; s < n; s++)
{
for (int t = 0; t < m; t++)
{
*clean_Row[s][t] = 0;
}
}
for (int p = 0; p < n; p++)
{
for (int q = 0; q < m; q++)
{
cout << arr[p][q]<<" ";
}
cout << endl;
}
return 0;
}
这是问题描述
https://ask.csdn.net/questions/7588239?answer=7588239&spm=1005.2026.3001.5703