两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单,用java实现

编程入门 行业动态 更新时间:2024-10-26 20:31:39

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a<a href=https://www.elefans.com/category/jswz/34/1766945.html style=说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单,用java实现"/>

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单,用java实现

这个题目思路有两种,一种挨个abc循环,挨个判断,比较好理解,另一种是取反思想

下面是最终的实现代码:

import java.util.ArrayList;
import java.util.List;/*** 两个乒乓球队进行比赛,各出三人。* 甲队为a,b,c三人,乙队为x,y,z三人。* 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。*/
public class PingPongMatch {public static void main(String[] args) {String[] teamA = {"a", "b", "c"};String[] teamB = {"x", "y", "z"};// 列出所有可能的比赛名单List<String[]> matchList = generateMatchList(teamA, teamB);// 根据已知条件筛选出符合要求的名单List<String[]> validMatchList = filterMatchList1(matchList);// 输出符合要求的比赛名单for (String[] match : validMatchList) {System.out.println("甲队:" + match[0] + " vs 乙队:" + match[1]);}}// 生成所有可能的比赛名单private static List<String[]> generateMatchList(String[] teamA, String[] teamB) {List<String[]> matchList = new ArrayList<>();for (String a : teamA) {for (String b : teamB) {matchList.add(new String[]{a, b});}}return matchList;}private static List<String[]> filterMatchList1(List<String[]> matchList) {List<String[]> validMatchList = new ArrayList<>();for (String[] match : matchList) {String a = match[0];String b = match[1];if ("a".equals(a) && !"x".equals(b)) {//a不和x比validMatchList.add(new String[]{a, b});} else if ("b".equals(a)) {validMatchList.add(new String[]{a, b});} else if ("c".equals(a) && !("x").equals(b) && !("z").equals(b)) {validMatchList.add(new String[]{a, b});}}return validMatchList;}// 根据已知条件筛选出符合要求的名单private static List<String[]> filterMatchList(List<String[]> matchList) {List<String[]> validMatchList = new ArrayList<>();for (String[] match : matchList) {String a = match[0];String b = match[1];if ((!a.equals("a") || !b.equals("x")) && (!a.equals("c") || !b.equals("x")) && (!a.equals("c") || !b.equals("z"))) {  // a不和x比validMatchList.add(match);}}return validMatchList;}
}

我们先看普通的实现:这个想对比较好理解,挨个循环abc,把符合条件的加到结果集中去

    private static List<String[]> filterMatchList1(List<String[]> matchList) {List<String[]> validMatchList = new ArrayList<>();for (String[] match : matchList) {String a = match[0];String b = match[1];if ("a".equals(a) && !"x".equals(b)) {//a不和x比validMatchList.add(new String[]{a, b});} else if ("b".equals(a)) {validMatchList.add(new String[]{a, b});} else if ("c".equals(a) && !("x").equals(b) && !("z").equals(b)) {validMatchList.add(new String[]{a, b});}}return validMatchList;}

另外一种就是取反思想:a说他不和x比,正面是第一个人等于a且第二个人等于x,这种条件是不满足的,那么取反就是只要第一个人不等于a或者第二个人不等于x即可

c说他不和x,z比,正面理解就是第一个人等于c且第二个人等于x或者第一个人等于c且第二个人等于z这两种情况不满足条件,这样实际上就和上面a 的那种情形是一样的,只是拆开了两组,所以最终的结论就是:a和c分别满足自己的条件的情况下取交集即可,也就是下面这样的:

第一个人不等于a或者第二个人不等与x

与上

(第一个人不等于c或者第二个人不等与x

或者

第一个人不等于c或者第二个人不等与z)

可以简化为:

第一个人不等于a或者第二个人不等与x

与上

第一个人不等于c或者第二个人不等与x

与上

第一个人不等于c或者第二个人不等与z

代码实现起来就是:

    private static List<String[]> filterMatchList(List<String[]> matchList) {List<String[]> validMatchList = new ArrayList<>();for (String[] match : matchList) {String a = match[0];String b = match[1];if ((!a.equals("a") || !b.equals("x")) && (!a.equals("c") || !b.equals("x")) && (!a.equals("c") || !b.equals("z"))) {  // a不和x比validMatchList.add(match);}}return validMatchList;}

ps:a不满足条件取反:

* 甲队:a vs 乙队:y
* 甲队:a vs 乙队:z
* 甲队:b vs 乙队:x
* 甲队:b vs 乙队:y
* 甲队:b vs 乙队:z
* 甲队:c vs 乙队:x
* 甲队:c vs 乙队:y
* 甲队:c vs 乙队:z

c不满足条件取反:

* 甲队:a vs 乙队:x
* 甲队:a vs 乙队:y
* 甲队:a vs 乙队:z
* 甲队:b vs 乙队:x
* 甲队:b vs 乙队:y
* 甲队:b vs 乙队:z
* 甲队:c vs 乙队:y

两种情况取交集就是最终的结果:

* 甲队:a vs 乙队:y
* 甲队:a vs 乙队:z
* 甲队:b vs 乙队:x
* 甲队:b vs 乙队:y
* 甲队:b vs 乙队:z
* 甲队:c vs 乙队:y

更多推荐

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请

本文发布于:2024-03-13 03:11:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1733058.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:说他   名单   不和   赛手   乒乓

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!