题目描述
未知一个整数矩阵的大小,在程序运行时才会输入矩阵的行数m和列数n
要求使用指针,结合new方法,动态创建一个二维数组,并求处该矩阵的最小值和最大值,可以使用数组下标法。
不能先创建一个超大矩阵,然后只使用矩阵的一部分空间来进行数据访问、
创建的矩阵大小必须和输入的行数m和列数n一样
输入
第一行输入t表示t个测试实例
第二行输入两个数字m和n,表示第一个矩阵的行数和列数
第三行起,连续输入m行,每行n个数字,表示输入第一个矩阵的数值
依次输入t个实例
输出
每行输出一个实例的最小值和最大值
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int m, n;
cin >> m >> n;
int *p = new int[m * n];
for (int i = 0; i < m * n; i++)
cin >> *(p + i);
int max=*p,min=*p;
for(int i=1;i<m*n;i++){
if(*(p+i)>max) max=*(p+i);
if(*(p+i)<min) min=*(p+i);
}
cout<<min<<" "<<max<<endl;
delete[] p;
}
}
老师的
//一、使用二维数组
//#include<iostream>
//using namespace std;
//
//int main()
//{
// int **p;
// int t,m,n,i,j,max,min;
// cin>>t;
// while(t--){
// cin>>m>>n;
// p=new int*[m];
//
// for(i=0;i<m;i++)
// p[i]=new int[n];
//
// for(i=0;i<m;i++)
// for(j=0;j<n;j++){
// int temp;
// cin>>temp;
// p[i][j]=temp;
// if(i==0 && j==0) //将矩阵的第一个数据设置为max,min
// max=temp,min=max;
// else{
// if(temp>max)
// max=temp;
// if(temp<min)
// min=temp;
// }
// }
// cout<<min<<" "<<max<<endl;
// }
// for(i=0;i<m;i++)
// delete[] p[i];
// delete[] p;
//
// return 0;
//}
//
//---------------------------------
//二、使用一维数组:指针变量指向动态数组,不移动
//#include<iostream>
//using namespace std;
//
//int main()
//{
// int *p;
// int t,m,n,i,j,max,min;
// cin>>t;
// while(t--){
// cin>>m>>n;
// p=new int[m*n];
//
// for(int i=0;i<m*n;i++){
// cin>>p[i];
// if(i==0){
// max=p[0];
// min=p[0];
// }
// else{
// if(p[i]>max)
// max=p[i];
// if(p[i]<min)
// min=p[i];
// }
// }
//
// cout<<min<<" "<<max<<endl;
// delete[] p;
// }
// return 0;
//}
指针变量指向动态数组,指针移动
//#include<iostream>
//using namespace std;
//
//int main()
//{
// int *p,*q;
// int t,m,n,i,j,max,min;
// cin>>t;
// while(t--){
// cin>>m>>n;
// q=new int[m*n]; //当指针移动时,要多设置一个指针,指向数组首地址,最后才能正确释放数组
// p=q;
//
// for(int i=0;i<m*n;i++,p++){
// cin>>*p;
// if(i==0){
// max=*p;
// min=*p;
// }
// else{
// if(*p>max)
// max=*p;
// if(*p<min)
// min=*p;
// }
// }
//
// cout<<min<<" "<<max<<endl;
// delete[] q;
// }
// return 0;
//}