感覺題目描述很搞笑,在那不斷的惡搞。呵呵,感覺出題人肯定是一個很有趣的人。其實題目很簡單,找出所有的數據當中成績絕對值最大的那個選手。唯一一點需要注意的就是題目中排序需要按照成績的絕對值,所以需要我們先計算出絕對值來。這個題目首次在bool函數當中用了這麼多判斷,其實這個題跟NYOJ上的一種排序很相像,不過上次比較笨,用的是很長很長的if判斷語句。其實這個題也應該算是一種排序的模版吧。
這個題一次AC,沒有太過糾結。不過在敲代碼的過程當中出現了幾次錯誤,也有幾點感悟,都隨手寫在代碼上了,大家可以參考一下或許會有些收穫。
原題地址:點擊打開鏈接。
代碼如下:
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
struct ch
{
int hang;//定義行
int lie;//列數
int cj;//分數(可以爲負)
int zhi;//分數的絕對值
}d[10001];
bool comp(ch x,ch y)
{
if(x.zhi>y.zhi) return true;
if(x.zhi==y.zhi&&x.hang<y.hang)return true ;
if(x.zhi==y.zhi&&x.hang==y.hang&&x.lie<y.lie)return true;
else return false;
}//整個函數進行排序,規避了sort排序不穩定的風險。
int main()
{
int i,j,k,l,n,m;
while(scanf("%d %d",&n,&m)!=EOF)
{ l=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&k);
d[l].cj=k;
d[l].zhi=abs(k);
d[l].hang=i;
d[l].lie=j;
l++;//此處需要注意,不能直接用l++;否則丟失數據。
}
}
sort(d,d+l,comp);//因爲在上面l多加了1,所以可直接應用。
printf("%d %d %d\n",d[0].hang,d[0].lie,d[0].cj);
}return 0;
}
覺得以後要養成一種習慣,把自己當時寫代碼時的感悟,錯誤,修改的地方都隨手加上備註,記錄下來。不僅僅是爲了方便其他人看,同時自己回顧的時候也可以一目瞭然,最快的複習。