1. 程式人生 > >PAT-1032挖掘機技術哪家強?

PAT-1032挖掘機技術哪家強?

1032 挖掘機技術哪家強(20)(20 分)

為了用事實說明挖掘機技術到底哪家強,PAT組織了一場挖掘機技能大賽。現請你根據比賽結果統計出技術最強的那個學校。

輸入格式:

輸入在第1行給出不超過10^5^的正整數N,即參賽人數。隨後N行,每行給出一位參賽者的資訊和成績,包括其所代表的學校的編號(從1開始連續編號)、及其比賽成績(百分制),中間以空格分隔。

輸出格式:

在一行中給出總得分最高的學校的編號、及其總分,中間以空格分隔。題目保證答案唯一,沒有並列。

輸入樣例:

6
3 65
2 80
1 100
2 70
3 40
3 0

輸出樣例:

2 150

#include <stdio.h>
int school[100000]={0};//題目要求把陣列的宣告放在第1行 
int main(){
	int n,id,score;
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++){
		scanf("%d%d",&id,&score);
		school[id]+=score;//將id相同的score累加起來,統計總成績
	}
	int k=-1,max=-1;
	for(int i=1;i<=n;i++){//遍歷
		if(school[i]>max){//遍歷比較
			max=school[i];//將最大值賦給max
			k=i;          //記錄下標
		}
	}
	printf("%d %d",k,max); 
	return 0;
}

summary:

     一定要按照題目要求來! 一定要按照題目要求來! 一定要按照題目要求來!

題目中明確給定在第一行給出不超過10^5的正整數N,即參賽人數,就必需放在第一行,之前我沒放在第一行,去OJ提交的時候,滿分20只給17,因為你的程式碼沒有按照題目要求的規範來,造成的扣分.為了減少不必要的扣分,一定要按照題目要求來!

    第一次做這道題的時候,根本沒什麼思路,磨了辦法,最後看了解析,後來才明白了,(這時候的我是有多菜)好了,正題開始:

陣列的每一個元素的下標,其實可以代表一類東西,比如 在陣列int A[10]; A[1]的下標1就可以代表ID為1的一類資料,並把ID為1的資料全部累加賦值到A[1]中,這樣A[1]的下標代表1這類資料,A[1]的值就代表ID為1的這類資料的值.

    求最大值值需要:定義一個MAX,讓,MAX和陣列中的每一個比較即可,

    如果MAX<陣列中的某一個值,則將那個比MAX大的值賦值給MAX,然後繼續遍歷比較.

    過程中如果還想知道它的下標,還可以定義一個mark,來記錄下標,

int mark=-1,max=-1;
	for(int i=1;i<=n;i++){
		if(school[i]>max){
			max=school[i];
			mark=i;
		}
	}