洛谷 P5740 最厉害的学生 java

该Java程序从标准输入读取学生姓名及三科成绩,计算总分并找出最高分。它使用Scanner类处理输入,存储数据到数组,并通过循环找到最高分学生的姓名和各科分数。
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); //人数
        int[] score = new int[n];//总分
        String[] name = new String[n];//姓名
        int[] y = new int[n];//语
        int[] s = new int[n]; //数学
        int[] yi = new int[n]; //英语
        for(int i=0;i<n;i++) {
             name[i] = scanner.next();
             y[i] = scanner.nextInt();
             s[i] = scanner.nextInt();
             yi[i] = scanner.nextInt();
            score[i] = y[i]+s[i]+yi[i];
        }
        int z = 0; 
        for(int i=1;i<score.length;i++) {  //假设score[0]是最大值
            if(score[i] > score[0]) { 
                score[0] = score[i]; 
                z = i; //返回下标
            }          
        }
        System.out.print(name[z]+" "+y[z]+" "+s[z]+" "+yi[z]);
    }

}

### 关于平台上的算法1至3的Java实现与解题思路 #### 算法1:排序问题 对于涉及大量数据处理的问题,如 P1271 题目中的学生会选举场景,使用低效的排序方法(如冒泡排序、选择排序或插入排序)可能导致时间复杂度过高而无法通过某些测试用例。为了优化性能并满足 n log n 的时间复杂度需求,推荐采用更高效的排序算法,例如快速排序或归并排序。 以下是基于 Java 的快速排序实现示例: ```java public class QuickSort { public static void sort(int[] array, int low, int high) { if (low < high) { int pi = partition(array, low, high); sort(array, low, pi - 1); sort(array, pi + 1, high); } } private static int partition(int[] array, int low, int high) { int pivot = array[high]; int i = low - 1; for (int j = low; j < high; j++) { if (array[j] <= pivot) { i++; swap(array, i, j); } } swap(array, i + 1, high); return i + 1; } private static void swap(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } ``` 此代码实现了经典的分治策略下的快速排序逻辑[^1]。 --- #### 算法2:进制转换问题 针对类似于 P1013 这样的题目,其核心在于理解不同进制间的数值表示形式以及如何高效完成二进制到八进制或其他任意进制之间的相互转化。由于 N 范围限定在 3 到 9 之间,并且字符唯一无重复现象存在,则可以利用数组映射或者字符串操作来简化计算过程。 下面提供了一个简单的十进制转其他指定基数的方法作为参考: ```java public String convertToBase(int number, int base){ StringBuilder result = new StringBuilder(); while(number > 0){ int remainder = number % base; char digitChar = Character.forDigit(remainder, base); result.insert(0,digitChar); number /=base ; } return result.toString(); } ``` 上述函数能够将给定整数按照目标基础进行重新编码输出[^2]。 --- #### 算法3:动态规划初步应用 虽然未具体提及某道特定习题编号属于该类别下项目之一,但是考虑到前两部分已经涵盖了基本排序技巧及其改进版还有基础算术运算扩展领域内的知识点之后,在这里简单介绍一下有关递推关系式的建立方式可能会有所帮助——即所谓的“状态转移方程”。 假设我们面临这样一个情境:求解斐波那契序列第n项值f(n),已知初始条件 f(0)=a,f(1)=b 。那么可以通过如下公式迭代得出后续各项结果直至达到所需位置为止: \[ \text{for } k=2\sim n,\quad f(k)=f(k−1)+f(k−2)\] 对应程序片段如下所示: ```java public long fibonacci(long a, long b,int index){ if(index==0)return a; else if(index==1)return b; long prev=a,next=b,temp; for(int i=2;i<=index;i++){ temp=prev+next; prev=next; next=temp; } return next; } ``` 以上展示了如何运用循环结构逐步累积终答案的过程[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值