【发布时间】:2021-05-17 17:26:02
【问题描述】:
我的任务是从矩阵中删除相同的行和列,而不删除第一个相同的行/列。例如,如果第二行、第三行和第四行相同,则应删除第三行和第四行,并保留第二行。列也是如此。我试图解决这个任务,但是,我的代码有一些错误,我不知道我的方法是否正确。我希望你能帮助我。
#if 0
Sample Input:
1 2 1 2 3
1 2 1 2 3
1 2 1 2 3
Sample Output:
1 2 3
#endif
#include <stdio.h>
int main()
{
int M, N, m[100][100], i, j, a = 0, k, b = 0;
printf("Enter dimensions: ");
scanf("%d %d", &M, &N);
for(i = 0; i < M; i++)
{
for(j = 0; j < N; j++)
{
scanf("%d", &m[i][j]);
}
}
for(i = 0; i < M; i++)
{
for(j = 0; j < N; j++)
{
if(m[i][j] != m[a][j])
{
a++;
continue;
}
if(m[i][j] != m[b][j])
{
b++;
continue;
}
if(i == M)
{
for(i = 0; i < M; i++)
{
m[i][k] = m[i][k + 1];
}
N--;
}
}
if(j == N)
{
for(k = 0; k < N; k++)
{
m[i][k] = m[i + 1][k];
}
M--;
}
}
printf("New matrix: \n");
for(i = 0; i < M; i++)
{
for(j = 0; j < N; j++)
{
printf("%d", m[i][j]);
}
printf("\n");
}
}
【问题讨论】:
-
如果您提供测试输入会很棒。
-
“删除”到底是什么意思?你的意思是用零替换值吗?对任何试图回答的人都有帮助的是样本输入以及样本输入的预期输出。
-
@asuka 我已经包含了示例
-
@Tom 我想因为在示例中第一、第二和第三行是相同的,所以应该删除第二和第三行,然后输出将是
1 2 1 2 3- 为什么它会转到1 2 3? -
@asuka 因为同样的规则也适用于列