总共有n个学生,第i个学生分到了ai个苹果,以及bi个橘子。请问有多少对学生(i,j),可以成功平分彼此的苹果和橘子。请用java生成代码,注意第一行输入一个正整数,代表学生的数量;接下来的n行,每行输入两个正整数,代表第i个和第j个学生
时间: 2024-10-28 11:06:40 浏览: 13
在Java中,你可以使用ArrayList和HashMap来解决这个问题。首先,我们需要遍历每个学生并记录他们的苹果和橘子总数,然后检查是否能找到其他学生,他们的苹果和橘子总数相加能否恰好等于第一个学生。以下是简单的代码示例:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class StudentDistribution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); // 学生数量
HashMap<Integer, Integer> studentCounts = new HashMap<>(); // 存储每个学生拥有的苹果和橘子总数
for (int i = 0; i < n; i++) {
int appleCount = scanner.nextInt();
int orangeCount = scanner.nextInt();
studentCounts.put(i + 1, new Pair(appleCount, orangeCount)); // 学生ID和数量对
}
ArrayList<Pair> possiblePairs = findPossiblePairs(studentCounts);
System.out.println("可以成功平分的学生对有:");
for (Pair pair : possiblePairs) {
System.out.println("学生 " + pair.studentId + " 和学生 " + (pair.studentId ^ 1));
}
}
private static ArrayList<Pair> findPossiblePairs(HashMap<Integer, Pair> studentCounts) {
ArrayList<Pair> pairs = new ArrayList<>();
for (Integer key : studentCounts.keySet()) {
Pair studentA = studentCounts.get(key);
for (Integer otherKey : studentCounts.keySet()) {
if (otherKey != key && canDivide(studentA, studentCounts.get(otherKey))) {
pairs.add(new Pair(key, otherKey));
}
}
}
return pairs;
}
private static boolean canDivide(Pair a, Pair b) {
return a.appleCount == b.orangeCount && a.orangeCount == b.appleCount;
}
static class Pair {
int appleCount, orangeCount;
int studentId;
public Pair(int appleCount, int orangeCount) {
this.appleCount = appleCount;
this.orangeCount = orangeCount;
this.studentId = Math.abs(appleCount - orangeCount); // 使用绝对值区分学生,因为题目未说明顺序
}
}
}
阅读全文