我必须比较矩阵列。
我尝试了许多变体,但据我所知,是当我比较“彼此相邻”的列时。
// N rows
// M columns
#include <iostream>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
int N, M, ok = 1;
const int maxn = 1000;
const int maxm = 1000;
short H[maxn][maxm];
cin >> N >> M;
for (int i=0; i<N; i++){
for (int j=0; j<M; j++){
cin >> H[i][j];
}
}
for (int j = 1; j < M; ++j)
{
ok = 1;
for (int i = 0; i < N; ++i)
{
if (H[i][j-1] >= H[i][j])
{
ok = 0;
}
}
if (ok)
{
cout << j+1 << endl;
return 0;
}
}
cout << -1 << endl;
return 0;
}
我必须返回第一列的索引为true,即该列的每个元素都大于任何其他列的元素。 (未汇总。)
例如:
10 10 12 15 10
11 11 11 13 20
12 16 16 16 20
它返回4
,因为第4列的每个元素都大于第1列的元素。
如果没有,则必须返回-1
。
答案 0 :(得分:0)
您需要另一个内部循环来遍历所有其他列:
#include <ios>
#include <iostream>
int main()
{
using namespace std;
ios_base::sync_with_stdio(false);
int N, M, ok = 1;
const int maxn = 1000;
const int maxm = 1000;
short H[maxn][maxm];
cin >> N >> M;
for (int i=0; i<N; i++){
for (int j=0; j<M; j++){
cin >> H[i][j];
}
}
for (int j = 0; j < M; ++j)
{
for (int j2 = 0; j2 < M; ++j2)
{
if (j == j2) continue;
ok = 1;
for (int i = 0; i < N; ++i)
{
if (H[i][j] <= H[i][j2])
{
ok = 0;
break;
}
}
if (ok)
{
cout << j + 1 << endl;
return 0;
}
}
}
cout << -1 << endl;
return 0;
}
输入:
3 5
10 10 10 15 10
11 11 11 13 20
12 16 16 14 20
此打印:
4