HDU---2022題海選女主角

感覺題目描述很搞笑,在那不斷的惡搞。呵呵,感覺出題人肯定是一個很有趣的人。其實題目很簡單,找出所有的數據當中成績絕對值最大的那個選手。唯一一點需要注意的就是題目中排序需要按照成績的絕對值,所以需要我們先計算出絕對值來。這個題目首次在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;
}
覺得以後要養成一種習慣,把自己當時寫代碼時的感悟,錯誤,修改的地方都隨手加上備註,記錄下來。不僅僅是爲了方便其他人看,同時自己回顧的時候也可以一目瞭然,最快的複習。


發佈了53 篇原創文章 · 獲贊 94 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章