1. 题目描述
题目: 用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或2人组成,且1个人只能参加1个团队,请计算出最多可以派出多少支符合要求的团队?
2. 输入描述
5
3 1 5 7 9
8
第一行数组代表总人数,范围[1,500000].
第二行数组代表每个人的能力,每个元素的取值范围[1,500000],数组的大小范围[1,500000].
第三行数值为团队要求的最低能力值,范围[1,500000].
3. 输出描述
3
最多可以派出的团队数量。
4. 示例演示
4.1 示例1
输入:
5
3 1 5 7 9
8
输出:
3
示例说明: 3,5 组成一队,1,7 组成一队,9 自己一个队,故输出 3。
java代码
package odTest;
import java.util.Arrays;
import java.util.Scanner;
public class attandanceProcession {
static int lowerLimit = 0;
static int personNum = 0;
static int maxVal = 0;
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
personNum = Integer.parseInt(scanner.nextLine());
int[] personArray = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
lowerLimit = Integer.parseInt(scanner.nextLine());
boolean[] hasUsed = new boolean[personNum];
Arrays.fill(hasUsed, false);
Arrays.sort(personArray);
judgeMaxNum(personArray,hasUsed);
System.out.println(maxVal);
}
private static int judgeMaxNum(int[] personArray, boolean[] hasUsed) {
int sum = 0;
int count = 0;
for(int i=0;i<personNum;i++) {
if(hasUsed[i]) {
continue;
}
count++;
hasUsed[i] = true;
sum = sum + personArray[i];
// System.out.println(sum);
if(sum>=lowerLimit) {
maxVal++;
return judgeMaxNum(personArray,hasUsed);
}else if(sum<lowerLimit&&count==2){
sum = sum - personArray[i];
hasUsed[i] = false;
count = count-1;
continue;
}
}
return 0;
}
}