关于c和java

1032. 挖掘机技术哪家强(20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。

输入格式:

输入在第1行给出不超过105的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。

输出格式:

在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

输入样例:
6
3 65
2 80
1 100
2 70
3 40
3 0
输出样例:
2 150

Java代码:

import java.util.Scanner;
public class Main{
  public static void main(String []args){
    Scanner sc = new Scanner(System.in);
    
    int n = sc.nextInt();
    int max = 0;
    int[]a = new int[100001];
    
    for(int i=0 ;i<n ;i++){
      int x = sc.nextInt();
      a[x] += sc.nextInt();
      if(a[x]>a[max]){
        max=x;
      }
    }

    System.out.println(max+" "+a[max]);
  }
}




c++代码:


#include<stdio.h>
int main(){
	int a[100000]={0};
	int n,x,y;
	int max=0;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %d",&x,&y);
		a[x]+=y;
		if(a[x]>a[max])
			max=x;
	}
	printf("%d %d",max,a[max]);
	return 0;
}



Java代码的运行结果:


c++代码运行的结果:


对比可以看出Java的前三个测试点的用时都达到了100ms以上  而c++代码运行时却用了不到5ms 。题目中的时间限制是200ms,c++代码中第4个测试点用时是前3个

测试点用时的10倍以上 ,达到了48ms,但是显然还是在200ms内的,甚至可以说远小于200ms。但是明显Java代码在第4个测试点的运行时间超过了200ms;




再举个例子:同样是pat上面的一道题


1047. 编程团体赛(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

现给定所有队员的比赛成绩,请你编写程序找出冠军队。

输入格式:

输入第一行给出一个正整数N(<=10000),即所有参赛队员总数。随后N行,每行给出一位队员的成绩,格式为:“队伍编号-队员编号 成绩”,其中“队伍编号”为1到1000的正整数,“队员编号”为1到10的正整数,“成绩”为0到100的整数。

输出格式:

在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

输入样例:
6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61
输出样例:
11 176


Java代码:

import java.util.Scanner;
public class Main{
  public static void main(String[]args){
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[]a = new int[10001];
    int max = 0;
    for(int i=0 ;i<n ;i++) {
      String s = sc.next();
      String[]s1 = s.split("-");
      int x = Integer.parseInt(s1[0]);
      a[x] += sc.nextInt();
      
      if(a[x]>a[max]){
        max = x;
      }
    }
    System.out.println(max+" "+a[max]);
  }
}


C++代码:

#include<iostream>
#include<cstdio>
using namespace std;

int main(){
  int n ;
  int max=0;
  int a[10001];
  
  int x ,y,score;
  scanf("%d" ,&n);
  
  for(int i=0 ;i<n ;i++){
    scanf("%d-%d %d",&x,&y,&score);
    a[x]+=score;
    if(a[x]>a[max]){
      max = x;
    }
  }
  printf("%d %d\n",max,a[max]);
  
  
  
  return 0;
} 


Java运行结果:


C++运行结果:


 


代码并没有什么不同,但是结果很明显有很大的不同,在时间效率和内存上存在着明显的差异;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值