破案问题:
最近某地连续发生了多起盗窃案件,根据监控和路人提供的线索得知,这是一个犯罪团伙。并且还知道这个犯罪团伙中每个人的身高、体重、年龄。警察想知道这个犯罪团伙中的每个人是不是本市的(如果本市有这个特征的人效视为是本市的)。但本市人口太多,又不能一个一个排查。警察又急需这条信息来缩小范围,所以警察特来找到聪明的你来帮忙解决这个棘手的问题。
输入格式
第一行将会输入两个数字n(1< n <2*10)和m(1m <10)n代表本市的人口数目,m 代表犯罪团伙的数量。
后面 n 行每行有3个数字代表本市每个人的身高、体重、年龄。然后会有 行每行有3个数字代表犯罪团伙每个人的身高、体重、年龄。
输出格式
输出mn行,每行输出一个yes”或“no"yes~代表这个罪犯是本市的,“no-代表这个罪犯不是本市的
样例输入
3 2 166 50 30 178 60 23 132 40 15 167 50 30 178 60 23
样例输出
no yes
代码实现如下所示:
import java.util.Scanner; public class test15 { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("请输入本市人口数目:"); int n=scanner.nextInt(); System.out.println("请输入犯罪人口数目:"); int m=scanner.nextInt(); scanner.nextLine(); // 添加该行以消耗nextInt()方法留下的换行符---导致第一个存储在数据中的元素是换行符 String[] strings=new String[n+m]; for(int i=0;i<(m+n);i++){ strings[i]=scanner.nextLine(); } //将两个犯罪团伙的信息与所有市民的信息进行比较 for(int j=n;j<(m+n);j++) { boolean found = false; for(int i=0;i<n;i++){ //string在进行比较时,应使用equals比较其内容是否相等而不是使用==比较其引用地址是否相等 if(strings[j].equals(strings[i])){ //注意:我们需要比较的是最后两个字符串是否与前三个字符串中任意的一个相等,当拿到一个比较的结果后就需要跳出循环而不是继续比较 found = true; break; } } if(found){ System.out.println("Yes"); }else{ System.out.println("No"); } } } }
输出如下所示:
请输入本市人口数目: 3 请输入犯罪人口数目: 2 166 50 30 178 60 23 132 40 15 167 50 30 178 60 23 No Yes