动态矩阵(指针与堆内存分配)-CSDN博客

79 阅读2分钟
题目描述

未知一个整数矩阵的大小,在程序运行时才会输入矩阵的行数m和列数n

要求使用指针,结合new方法,动态创建一个二维数组,并求出该矩阵的最小值和最大值,可以使用数组下标法。

不能先创建一个超大矩阵,然后只使用矩阵的一部分空间来进行数据访问、

创建的矩阵大小必须和输入的行数m和列数n一样


输入

第一行输入t表示t个测试实例

第二行输入两个数字m和n,表示第一个矩阵的行数和列数

第三行起,连续输入m行,每行n个数字,表示输入第一个矩阵的数值

依次输入t个实例

 


输出

每行输出一个实例的最小值和最大值

 


输入样例1 
2
2 3
33 22 11
66 88 55
3 4
19 38 45 14
22 65 87 31
91 35 52 74

输出样例1
11 88
14 91

该题主要考察使用new进行二维数组的定义

#include<iostream>
using namespace std;
int main()
{
	int t, n, m, num, j = 0, max, min;
	cin >> t;
	while (t--)
	{
		max = -10000; min = 10000;
		cin >> n;
		cin >> m;
		int** arr = new int* [n];
		for (int i = 0; i < n; i++)
		{
			arr[i] = new int[m];
			for (int j = 0; j < m; j++)
			{
				cin >> num;
				if (num > max)
				{
					max = num;
				}
				if (num < min)
				{
					min = num;
				}
				arr[i][j] = num;
			}
		}
		cout << min << " " << max << endl;

		for (int i = 0; i < m; i++) {
			delete[] arr[i];
		}
		delete[] arr;
	}


	return 0;
}

值得注意的是new二维数组的创建

int **p=new int*[m];       //**p!因为我们每一个格子要存储数组(列)它的本质是指针
 //创建行                  //所以这里用 int*[m]

for(i=0;i<m;i++) //创建列
    p[i]=new int[n]; 

而且特别要注意的是我们必须在使用完申请的内存后将其释放!!!!!!!!!!!!!!!!

		for (int i = 0; i < m; i++){
			delete[] arr[i];
		}
		delete[] arr;