【PAT B1032】挖掘机技术哪家强(20)---3.1简单模拟

B1032. 挖掘机技术哪家强(20)
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。
输入格式:
输入在第1行给出不超过10^5的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。
输出格式:
在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。
输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0

输出样例:
2 150

我:

1.一维数组定义格式如下,数组大小必须是整数常量,不可以是变量:

数据类型 数组名[数组大小];

只能访问下标为0~size-1的元素,以如下形式访问:

数组名称[下标]

一维数组的初始化需要给出用逗号隔开的从第一个元素开始的若干个元素的初值,并用大括号括住。后面未被赋初值的元素将会被赋上默认初始值(一般为0,取决于编译器内部)。如果想要给整个数组都赋初值0,只需要把第一个元素赋为0,或只用一个大括号来表示:

int a[10]={1,2,3,4};

int a[10]={0};
int a[10]={};

2.这题数组大小不是确定的常量,那么定义数组时就先定义学校数量为一个 const常量,一旦确定其值后无法改变:

const 数据类型 变量名=常量

3.整型int:绝对值在10^9范围以内的整数都可以定义成int型。

4.for循环:

for(A循环变量赋初值;B循环条件;C循环变量改变){
···
}
1.for循环开始前先执行A;
2.判断B是否成立:若成立,执行···;否则,退出循环;
3.···执行完后,执行C;之后回到判断B。

需要注意,C语言中不允许在for语句的表达式A中定义变量(如int i是不允许的),但C++可以,因此需要保存为.cpp文件才可以通过编译。

5.scanf函数:如果要输入两个空格隔开的数字,两个%d之间可以不加空格。

6.+=

晴神:C++

  • 思路:
  • 数组school[maxn]记录每个学校的总分,初值为0。对每一个读入的学校schoolID与其对应的分数score,令school[schID]+=score。
  • 令变量k记录最高总分的学校编号,变量MAX记录最高总分,初值为-1。由于学校是连续编号的,因此枚举编号1~N,不断更新k和MAX即可。
#include<cstdio>
const int maxn=100010;
int school[maxn]={};//记录每个学校的总分,初值为0
//const常量定义和一维数组定义写在主函数之前 
int main(){
	int n,schID,score;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d%d",&schID,&score);//学校ID,分数
		school[schID]+=score;//学校ID的总分增加score 
	}
	int k=1,MAX=-1;//最高总分的学校ID以及其总分
	for(int i=1;i<=n;i++){//从所有学校中选出总分最高的
	    if(school[i]>MAX){
	    	MAX=school[i];
	    	k=i;
		} 
	}	
	printf("%d %d\n",k,MAX);
	return 0;
}



LC:C++

#include <iostream>
#include <vector>
using namespace std;
int main() {
    int N;
    cin >> N;
    vector<int> a(N);
    int num, score;
    for (int i = 0; i < N; i++) {
        cin >> num >> score;
        a[num] += score;
    }
    int max = a[1], t = 1;
    for (int i = 1; i < N; i++) {
        if (max < a[i]) {
            max = a[i];
            t = i;
        }
    }
    cout << t << " " << max;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/iyansuan/article/details/80880548