問題描述
面試那天,剛好來了m * n
個MM,站成一個m * n
的隊列,副導演Fe(OH)2為每個MM打了分數,分數都是32位有符號整數。
一開始我很納悶:分數怎么還有負的?Fe(OH)2解釋說,根據選拔規則,頭發染成黃色、化妝太濃、穿的太少等等都要扣分數的,扣的多了就可能是負分了,當然,如果發現話語中夾有日語,就直接給 -2147483648分 了。
分數送上來了,是我做決定的時候了,我的一個選拔原則是,要選一個面試分數絕對值(必須還是32位整數)最大的MM。
特別說明:如果不幸選中一個負分的MM,也沒關系,因為我覺得,如果不能吸引你,那要想法惡心你。
輸入數據有多組,每組的第一行是兩個整數m和n,表示應聘MM的總共的行列數,然后是m行整數,每行有n個,m和n的定義見題目的描述。
對于每組輸入數據,輸出三個整數x,y和s,分別表示選中的MM的行號、列號和分數。
注意:行號和列號從一開始,如果有多個MM的分數絕對值一樣,那么輸出排在最前面的一個(即行號最小的那個,如果行號相同則取列號最小的那個)。
輸入樣本
2 3
1 4 -3
-7 3 0
輸出樣本
2 1 -7
解題思路
m * n
個MM,說明這是一個二維數組- 分數是一個32位有符號的整數,說明這是一個整數類型
- 根據題目中,該題中實際要對比的是數字的絕對值,并且如果同一列中,存在相同的變量,去行最小,如果行相同,取列最小
- 如何輸入變量到二維數組中?
需要使用兩個 for 循環結構,進行嵌套輸入數組的變量,一個表示行,一個表示列 - 如何對輸入的數組變量變成絕對值進行判定?
需要調用頭文件<cmath>
使用abs
函數進行絕對值判定,在使用 if 結構進行判定,但是在這之前需要定義一個變量,用來存儲最大絕對值 - 如何輸出對應的位置和數組變量?
在最后進行輸出的時候,需要對行號和列號,進行加一,并輸出行號和列號對應的數組變量 - 問題中提到的當遇到兩個相同的變量,取排在最前的行號和列號,怎么處理?
這點可以不用進行處理,因為代碼在運行的過程中是從上到下,從左到右,進行依次處理,只要在使用 if 結構在進行判定的時候不要使用大于等于
或小于等于
即可
代碼示例
#include <iostream>
#include <cmath> // 調用頭文件
using namespace std;int main() {int a[100][100]; // 定義數組變量int m , n; // 定義女主角的變量while(cin >> m >> n){ // 反復輸入操作int b = 0 , c , d; // 設定三個變量,一個用來存儲最大絕對值,另外兩個用來存儲行號和列號for(int i = 0 ; i < m ; ++i){ // 使用 for 循環進行二維數組行號的操作cout << endl; // 輸出換行符,便于直觀查看,可不寫for(int j = 0 ; j < n ; ++j){ // 使用 for 循環進行二維數組列號的操作cin >> a[i][j]; // 輸入變量到二維數組if(abs(a[i][j]) > b ){ // 若數組絕對值 > 0 進行更換操作b = abs(a[i][j]); // b = 新的數組變量絕對值c = i ; // c = 對應的行號d = j ; // d = 對應的列號}}}cout << (c+1) << ' ' << (d+1) << ' ' << a[c][d] << endl; // 按照輸出樣本,輸出對應的行號和列號,以及對應的變量。}return 0;
}