题目描述
未知一个整数矩阵的大小,在程序运行时才会输入矩阵的行数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;