问题遇到的现象和发生背景
问题出现在一道C语言的题中
我的思路是按行和按列分别遍历给定的数组,将出现三个及上相同数字的这些数字的地址存入指针数组,最后把指针数组中的所有指针指向的值全部变为0
如果看我的代码太麻烦直接回答问题也行
问题相关代码,请勿粘贴截图
#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;
}
我写的有点乱,刚入门,还请见谅
运行结果及报错内容
然后程序就停在了这个界面
调试时遇到的问题
我的解答思路和尝试过的方法
感觉可能是指针数组这个地方没有写好,还请指教