试题 算法训练 新生舞会(Java)

tech2026-08-07  2

问题描述   新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。

输入   第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。   之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。

输出   对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。

样例输入   4   John 10 M   Jack 11 M   Kate 20 F   Jim 21 M   3   John 11   20 Jack   Jim Jack

样例输出   N   Y   N

import java.util.Scanner; public class Main { static class Student { private String name; private String number; private String sex; public Student(String name, String number, String sex) { this.name = name; this.number = number; this.sex = sex; } @Override public String toString() { return "Student [name=" + name + ", number=" + number + ", sex=" + sex + "]"; } } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = Integer.parseInt(sc.nextLine()); Student[] stu = new Student[n]; for (int i = 0; i < n; ++i) { String a = sc.nextLine(); String[] info = a.split(" "); stu[i] = new Student(info[0], info[1], info[2]); } int m = Integer.parseInt(sc.nextLine()); String[][] str = new String[m][2]; for (int i = 0; i < m; ++i) { String b = sc.nextLine(); String[] con = b.split(" "); str[i][0] = con[0]; str[i][1] = con[1]; } sc.close(); String sex1 = ""; String sex2 = ""; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (str[i][0].equals(stu[j].name) || str[i][0].equals(stu[j].number)) { sex1 = stu[j].sex; break; } } for (int j = 0; j < n; ++j) { if (str[i][1].equals(stu[j].name) || str[i][1].equals(stu[j].number)) { sex2 = stu[j].sex; break; } } if (sex1.equals(sex2)) { System.out.println("N"); }else { System.out.println("Y"); } } } }
最新回复(0)