Manager
时间限制:1S
内存限制:64MB
描述
小明是一个互联网公司的老板,需要招聘员工。现在有k个学校的学生前来应聘。
由于特殊原因,要求最后入职的员工学校的人数应该都不一样。
比如我们可以A大学录取5人,B大学录取4人。但是不允许A大学和B大学都录取5人。
请问最后最多录取多少人呢?
输入描述
第一行一个整数k,表示学校的数量。
第二行k个整数ai,表示这个学校有ai个人前来应聘。
满足 1<=k<=100000,1<=ai<=100000
输出描述
输出最多录取人数
示例
输 入:
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,有两个学校人数相等,不符合题干