#include
using namespace std;
int main()
{
int n;
cin >> n;
int** ar = new int*[n];
for (int i = 0; i < n; i++)
{
ar[i] = new int[3];
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 3; j++)
{
cin >> ar[i][j];
}
ar[i][0] = ar[i][0] + ar[i][1];
ar[i][1] = ar[i][0] + ar[i][2];
}
int t;
for (int k = 0; k < n; k++)
{
int m = k + 1;
for (; m < n; m++)
{
if (ar[k][1] >= ar[m][1])
{
if ((ar[k][1] == ar[m][1])&&ar[k][2]>ar[m][2])
{
t = ar[k][0];
ar[k][0] = ar[m][0];
ar[m][0] = t;
t = ar[k][1];
ar[k][1] = ar[m][1];
ar[m][1] = t;
t = ar[k][2];
ar[k][2] = ar[m][2];
ar[m][2] = t;
}
t = ar[k][0];
ar[k][0] = ar[m][0];
ar[m][0] = t;
t = ar[k][1];
ar[k][1] = ar[m][1];
ar[m][1] = t;
t = ar[k][2];
ar[k][2] = ar[m][2];
ar[m][2] = t;
}
}
}
int count = 0;
for (int a = 0; a < n; a++)
{
count += (n - a) * ar[a][0] + (n - a - 1) * ar[a][2];
}
cout << count;
delete[]ar;
return 0;
}
为啥这段代码只可以通过四个啊
看下怎么说,是用例不通过还是超时了。
首先,在动态分配二维数组 ar 的时候,没有对分配的内存进行释放,可能会导致内存泄漏的问题。正确的做法应该是在 delete[]ar 前,使用循环释放二维数组中每个元素所分配的内存,再释放二维数组本身。
其次,排序算法中的冒泡排序存在性能问题,当排序数据量比较大时,交换次数较多,排序速度较慢。更好的排序算法可以选择快速排序、归并排序等。
此外,在排序算法中,可能会出现错误的逻辑实现,导致排序结果不正确。比如这段代码中的排序算法,其判断是否需要交换两个元素的条件语句中,如果交换的两个元素刚好满足该条件,但交换后的两个元素和原来的顺序相同时,就不能交换。