关于#c++#的问题,请各位专家解答!

img


#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 前,使用循环释放二维数组中每个元素所分配的内存,再释放二维数组本身。

其次,排序算法中的冒泡排序存在性能问题,当排序数据量比较大时,交换次数较多,排序速度较慢。更好的排序算法可以选择快速排序、归并排序等。

此外,在排序算法中,可能会出现错误的逻辑实现,导致排序结果不正确。比如这段代码中的排序算法,其判断是否需要交换两个元素的条件语句中,如果交换的两个元素刚好满足该条件,但交换后的两个元素和原来的顺序相同时,就不能交换。