用C++解决矩阵的问题

用C++解决矩阵的问题

问题描述:

这是原题目:{
重建给定的矩形矩阵,移动其中的字符串,
这样,结果矩阵的行中的元素之和就会增加。
-输出收到的矩阵;
-在其中查找不包含负数的第一列的数目元素。
}
最后一个输出的要求:(在其中查找不包含负数的第一列的数目元素)我不是很清楚,
但是大概的要求是:
输入一个n乘n的随机矩阵:
1 4 7
2 5 8
3 6 9
1.输出矩阵
2矩阵的行相加(1+4+7=12,2+5+8=15,3+6+9=18)后输出显示得数
然后按得数的大小排列每一行,输出显示:
3 6 9
2 5 8
1 4 7

运行图及代码如下,如有帮助,请帮忙采纳一下,谢谢。

img

代码

#include <iostream>
using namespace std;

int main()
{
    int i,j,n;
    int**a;
    int* sum;
    int* index;
    //输入n
    cin >> n;
    a = new int*[n];
    sum = new int[n]; //存储每一行的和
    index = new int[n]; //存储行的下标
    //输入n*n的矩阵
    for(i=0;i<n;i++)
    {
        a[i] = new int[n];
        sum[i] = 0;
        index[i] = i;
        for(j=0;j<n;j++)
        {
            cin >> a[i][j];
            sum[i] += a[i][j];
         }
    }
    //按照行的和排序
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1-i;j++)
        {
            if (sum[j] < sum[j+1])
            {
                int t = sum[j];
                sum[j] = sum[j+1];
                sum[j+1] = t;

                //调整下标
                t = index[j];
                index[j] = index[j+1];
                index[j+1]=t;
            }
        }
    }
    //输出
    for (i=0;i<n;i++)
    {
        int t = index[i];
        for(j=0;j<n;j++)
        {
            if(j<n-1)
                cout << a[t][j] << " ";
            else
                cout << a[t][j] << endl;
        }
    }

    delete[] sum;sum = 0;
    delete[] index;index=0;
    for(i=0;i<n;i++)
    {
        delete[] a[i];
        a[i] = 0;
    }
    delete[] a;
    a = 0;
    return 0;
}