一开始将输入的数据存入数组中,一直爆掉
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m, n;
while(true)
{
cin >> m>> n;
long **s = new long* [m];
for(int i=0; i<m; i++)
s[i] = new long[n];
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin >> s[i][j];
}
}
int maxr, maxc, maxn;
maxr = maxc = 0;
maxn = s[0][0];
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
if(abs(s[i][j]) > maxn)
{
maxr = i;
maxc = j;
maxn = abs(s[i][j]);
}
}
}
cout << maxr+1<<" " << maxc+1<< " " << s[maxr][maxc] << endl;
//释放空间
for(int i=0; i<m; i++)
{
delete[] s[i];
}
s = NULL;
}
return 0;
}
起始这就是一个求最值的问题,根本不需要使用数组,先遍历存储再遍历比较,直接边读取输入边处理即可。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m, n;
while(true)
{
cin >> m >> n;
int maxr, maxc, temp;
long maxn = 0;
bool flag = true;
maxr = maxc = maxn = 0;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin >> temp;
if(abs(temp) > maxn)
{
maxr = i+1;
maxc = j+1;
maxn = abs(temp);
flag = maxn==temp?true:false;
}
}
}
cout << maxr<<" " << maxc<< " " << (flag?1:(-1))*maxn << endl;
}
return 0;
}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m, n;
while(cin >> m >> n)
{
int maxr, maxc, temp;
long maxn = 0;
bool flag = true;
maxr = maxc = maxn = 0;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin >> temp;
if(abs(temp) > maxn)
{
maxr = i+1;
maxc = j+1;
maxn = abs(temp);
flag = maxn==temp?true:false;
}
}
}
cout << maxr<<" " << maxc<< " " << (flag?1:(-1))*maxn << endl;
}
return 0;
}
进一步可以不用设置标志值,直接将maxn
看做是绝对值最大的量就行。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int m, n;
while(cin >> m >> n)
{
int maxr, maxc, temp;
long maxn = 0;
maxr = maxc = maxn = 0;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin >> temp;
if(abs(temp) > abs(maxn))
{
maxr = i+1;
maxc = j+1;
maxn = temp;
}
}
}
cout << maxr<<" " << maxc<< " " << maxn << endl;
}
return 0;
}
将maxn
的数据类型改为int
也行,因为实际上存储的是负数,进行一次abs
运算的到的是中间结果,不会溢出。