我真的是怎么也不知道哪里不符合题目要求,希望大家不吝赐教,指点一下。 (T▽T)
#include <iostream>
using namespace std;
long long A[50][50] = { 0 }, B[50][50] = { 0 };
int s(int a, int b, int c, int d);
int main()
{
int n, m, i, j, I, J, t;
cin >> n >> m;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
cin >> A[i][j];
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
t = 0;
for (I = 0; I < n; I++)
{
for (J = 0; J < m; J++)
{
if (A[i][j] == A[I][J])
{
t = s(i, j, I, J);
if (t > B[i][j])
{
B[i][j] = B[I][J] = t;
}
}
}
}
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
cout << B[i][j] << " ";
if (j < m - 1)
cout << "\n";
}
return 0;
}
int s(int a, int b, int c, int d)
{
int L;
L = (a - c) * (a - c) + (b - d) * (b - d);
return L;
}
- 输入数组维度与元素值:
- 首先通过
cin
从标准输入读取两个整数n
和m
,分别表示二维数组A
的行数和列数。 - 接着使用两层嵌套的循环遍历数组
A
的每一个位置,通过cin
读取每个位置的元素值,并将其存储到数组A
中。
- 首先通过
- 处理数组
A
并更新数组B
:- 然后使用四层嵌套的循环来处理数组
A
。对于数组A
中的每一个元素A[i][j]
,通过内层的两层嵌套循环(遍历I
和J
)遍历整个数组A
,检查是否存在与A[i][j]
相等的元素A[I][J]
。 - 当找到相等元素时,调用函数
s
计算一个值t
(计算的是基于元素位置的平方距离值)。 - 如果计算得到的
t
值大于当前B[i][j]
的值,就将B[i][j]
和B[I][J]
都更新为t
。
- 然后使用四层嵌套的循环来处理数组
- 输出数组
B
:- 最后使用两层嵌套的循环遍历数组
B
的每一个位置,通过cout
将每个位置的元素值输出到标准输出。 - 在每行输出结束时(除了最后一行),如果当前列数
j
小于列数m - 1
,就输出一个换行符\n
,以保证每行元素输出后换行。函数
s
的实现int s(int a, int b, int c, d) { int L; L = (a - c) * (a - c) + (b - d) * (b - d); return L; }
- 函数
s
实现了计算平面上两点(由参数a
、b
和c
、d
分别表示这两点的横纵坐标)之间的平方距离的功能。 - 通过公式
(a - c)^2 + (b - d)^2
计算得到这个平方距离值,并将其作为函数的返回值返回。到底哪不符合题目要求啊...╥﹏╥
- 最后使用两层嵌套的循环遍历数组