学习-Java循环之嵌套循环之淡水湖排名

第1关:学习-Java循环之嵌套循环之淡水湖排名


任务描述

本关任务:我国有 4 大淡水湖,分别是洞庭湖,洪泽湖,鄱阳湖和太湖。 A 说:洞庭湖最大,洪泽湖最小,鄱阳湖第三; B 说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三; C 说:洪泽湖最小,洞庭湖第三; D 说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 请根据每人说的话求出 4 大湖的正确排名。

注意:4个湖不存在相等的情况,且每人只说对一句话。

相关知识

嵌套循环

嵌套循环就是一个循环中包含一个或者 n 个其他的循环,while、do…while 和 for 循环之间可以相互嵌套,比如 for 循环里面可以有 for 循环,for 循环里可以有 do…while 循环等。

嵌套循环使用案例:打印如下所示图形。

 
  1. *
  2. **
  3. ***

代码如下:

 
  1. public static void main(String[] args) {
  2. int i, j;
  3. for (i = 1; i <= 3; i++) { // 外层循环控制行数
  4. for (j = 1; j <= i; j++) { // 内层循环打印 *
  5. System.out.print("*"); // 注意不是 println
  6. }
  7. System.out.print("\n"); // 换行
  8. }
  9. }

从以上案例中可以得出,嵌套循环的外层循环迭代一次,即换行一次,内层循环执行一遍,即循环打印某行的所有*

使用 Java 解逻辑题

一个班中有 4 位同学外出,其中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做的好事。 A 说:不是我; B 说:是 C; C 说:是 D; D 说:C 胡说。 已知有三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。

第一步:创建变量分别代表 A,B,C,D; 第二步:把每个人说的话转化为逻辑语句,比如 A 说的话可表示为!='A',B 说的话可表示为=='C',C 说的话可表示为=='D',D 说的话可表示为!='C'; 第三步:使用三元运算符把说话的真假转化为具体数值,比如 1 代表说话为真, 0 代表说话为假; 第四步:把四个人说的话都转化成三元运算符(话为真赋值为 1,为假则赋值为 0),然后对所有三元运算符的值求和,如果等于 3,说明有三人说真话,一人说假话。

具体代码如下:

 
  1. public static void main(String[] args) {
  2. char t;
  3. int sum;
  4. // 从A开始循环,当sum等于3时,输出做了好事的人
  5. for (t='A'; t<='D'; t++) {
  6. sum = (t!='A'?1:0) + (t=='C'?1:0)+(t=='D'?1:0)+(t!='D'?1:0);
  7. if (sum==3)
  8. System.out.printf("做好事的人是"+t);
  9. }
  10. }

输出结果:

 
  1. 做好事的人是C

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧 “测试结果”区查看具体的测试集详情。


开始你的任务吧,祝你成功!

/*
任务:我国有 4 大淡水湖,分别是洞庭湖,洪泽湖,鄱阳湖和太湖。
A 说:洞庭湖最大,洪泽湖最小,鄱阳湖第三;
B 说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三;
C 说:洪泽湖最小,洞庭湖第三;
D 说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
请输出4大湖的正确排名,输出样式:洞庭湖排名:n 

A说的话可用如下表达式体现:
int a1 = (dongting == 1) ? 1 : 0;//洞庭湖最大(1),是的话赋值为1,否则赋值为0
int a2 = (hongze == 4) ? 1 : 0;//洪泽湖最小(4),是的话赋值为1,否则赋值为0
int a3 = (poyang == 3) ? 1 : 0;
a=a1+a2+a3;//A说的话

*/

public class LakeTest {
    public static void main(String[] args) {
        int a, b, c, d;   // 定义4个人说的话
        int dongting, hongze, poyang, tai;  // 定义4个湖
        
        // 请在Begin-End间编写代码
        /********** Begin **********/
        // 使用嵌套循环依次遍历各个湖的4种排名情况,用逻辑表达式表达每人说的话,输出具体排名
       for(dongting=1;dongting<=4;dongting++){
           for(poyang=1;poyang<=4;poyang++){
               if(poyang==dongting) continue;
               for(hongze=1;hongze<=4;hongze++){
                   if(hongze==poyang||hongze==dongting) continue;
                   for(tai=1;tai<=4;tai++){
                       if(tai==hongze||tai==poyang||tai==dongting) continue;
                       a=(dongting==1?1:0)+(hongze==4?1:0)+(poyang==3?1:0);
                       b=(hongze==1?1:0)+(dongting==4?1:0)+(poyang==2?1:0)+(tai==3?1:0);
                       c=(hongze==4?1:0)+(dongting==3?1:0);
                       d=(poyang==1?1:0)+(tai==4?1:0)+(hongze==2?1:0)+(dongting==3?1:0);
                       if(a==1&&b==1&&c==1&&d==1){
                           System.out.println("洞庭湖排名:" + dongting);
                           System.out.println("洪泽湖排名:" + hongze);
                           System.out.println("鄱阳湖排名:" + poyang);
                           System.out.println("太湖排名:" + tai);
                       }
                   }
               }
           }
       }
       
       
        /********** End **********/

    }
}

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值