海选女主角
解题思路
首先想到的就是二维数组。读入过程中记录最大值以及位置。
在解题过程中碰到了abs的使用问题。题目中出现了-2147483648分。这个数字是很有意思的,因为int的范围是在-2147483648~2147483647。对这个数字取绝对值的话恰巧超出了这个范围。最为简单的方式就是自己写一个abs,用unsigned int来接受返回值。
AC
#include<iostream>
using namespace std;
unsigned int abs_re(signed int number) {
return number >= 0 ? number : -number;
}
int main()
{
signed int m, n,a[105][105],x,y,s;
while (cin >> m >> n) {
x = 1;
y = 1;
s = 0;
memset(a, 0, sizeof(a));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
if (abs_re(a[i][j]) > abs_re(s)) {
x = i + 1;
y = j + 1;
s = a[i][j];
}
}
}
cout << x << " " << y << " " << s << endl;
}
return 0;
}
我也不知道咋ac的
2024.03.11
#include<stdio.h>
#include<stdlib.h>
int main() {
int m, n, x, y;
int max;
signed int* array;
while (scanf("%d %d", &m, &n) != EOF) {
x = 0; y = 0; max = 0;
array = (signed int*)malloc(m * n * sizeof(signed int*));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &array[i * n + j]);
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (abs(array[i * n + j]) > abs(max)) {
max = array[i * n + j];
x = i;
y = j;
}
}
}
printf("%d %d %d\n", x + 1, y + 1, max);
}
return 0;
}