大家好,欢迎来到IT知识分享网。
Manager
时间限制:1S
内存限制:64MB
描述
小明是一个互联网公司的老板,需要招聘员工。现在有k个学校的学生前来应聘。
由于特殊原因,要求最后入职的员工学校的人数应该都不一样。
比如我们可以A大学录取5人,B大学录取4人。但是不允许A大学和B大学都录取5人。
请问最后最多录取多少人呢?
输入描述
第一行一个整数k,表示学校的数量。
第二行k个整数ai,表示这个学校有ai个人前来应聘。
满足 1<=k<=,1<=ai<=
输出描述
输出最多录取人数
示例
输 入:
3
3 3 2
返回值:
6
题目要求都不一样,所以,应先排序,然后判断后一个数是否大于前一个数,若大于,则后一个数的值改为前一个数减一,代码如下:
import java.util.Scanner; import java.util.Arrays; public class Main{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int k = scanner.nextInt(); int[] a = new int[k]; for(int i=0;i<k;i++){ a[i] = scanner.nextInt(); } Arrays.sort(a); long sum = a[k-1]; for(int i=k-2;i>=0;i--){ if(a[i]>=a[i+1]){ a[i]=a[i+1]-1; } sum+=Long.valueOf(a[i]); } System.out.print(sum); } }
但:
将上述代码中判断逻辑改为判等
import java.util.Scanner; import java.util.Arrays; public class Main{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int k = scanner.nextInt(); int[] a = new int[k]; for(int i=0;i<k;i++){ a[i] = scanner.nextInt(); } Arrays.sort(a); long sum = a[k-1]; for(int i=k-2;i>=0;i--){ if(a[i]==a[i+1]){ a[i]=a[i+1]-1; } sum+=Long.valueOf(a[i]); } System.out.print(sum); } }
但是,判等是不符合题干的,当我们排序后,有可能出现以下顺序:
6 6 6
正确答案应该是:4+5+6
但判等的答案是:6+5+6,有两个学校人数相等,不符合题干
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142730.html