Com.Java.Basis第五课《针对流程控制的语句练习题》(一)

简介: Com.Java.Basis第五课《针对流程控制的语句练习题》(一)

2022年0701-Com.Java.Basis第五课《针对流程控制的语句练习题》、

问题一:隔行变色

Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。

小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....

现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。

请你直接提交这个整数,千万不要填写任何多余的内容。

package 第四次蓝桥杯测试;
/**
 * 
 * @author MZFAITHDREAM
 *1.隔行变色
 Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。15
 */
public class DemoTest1 {
  public static void main(String[] args) {
    for (int i = 21; i <= 50; i=i+2) {
      System.out.println(i);
    }
  }
}

问题二:煤球数目

有一堆煤球,堆成三角棱锥形。具体:

第一层放1个,

第二层3个(排列成三角形),

第三层6个(排列成三角形),

第四层10个(排列成三角形),

如果一共有200层,共有多少个煤球?

请填表示煤球总数目的数字。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

package 第四次蓝桥杯测试;
/**
 *  煤球数目
 * @author MZFAITHDREAM
 *有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
如果一共有200层,共有多少个煤球?
请填表示煤球总数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
递归
 */
public class DemoTest2 {
  public static void main(String[] args) {
    int sum = 0;
      //求和 每层煤球的数目相加
      for (int i = 1; i <= 100 ; i++) {
          sum += briquetteNum(i);
      }
      System.out.println(sum);
  }
  //求每层有多少个煤球
  public static int briquetteNum(int num) {
      if (num == 1) {
          return 1;
      }else {
//        
          return briquetteNum(num - 1) + num;
      }
  }
}

问题三:无穷分数

无穷的分数,有时会趋向于固定的数字。

请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。

请填写该浮点数,不能填写任何多余的内容。

package 第四次蓝桥杯测试;
import java.text.DecimalFormat;
/**
 * 无穷分数
 * 3. 无穷分数
无穷的分数,有时会趋向于固定的数字。
请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。
请填写该浮点数,不能填写任何多余的内容。
 * @author MZFAITHDREAM
 *DecimalFormat是格式为十进制数的NumberFormat的具体子类。
 * 它具有各种功能,旨在使任何地区的数字解析和格式化,包括支持西方,阿拉伯语和印度数字
 它还支持不同类型的数字,包括整数(123),定点数(123.4),科学记数法(1.23E4),百分比(12%)和货币金额(123美元)。 
 所有这些都可以进行本地化。 
 */
public class DemoTest3 {
  public static void main(String[] args) {
    float a=100000;
    DecimalFormat df = new DecimalFormat("0.00000");//保留五位小数
    for (float i = 1000000; i >= 0; i=i-1) {
    a = i + (i + 1) / a;  
    }
    System.out.println("保留的五位数"+df.format(a));
  }
}

问题四:海盗比酒量

有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,

有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,

海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。

   等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”

   请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。

   如果有多个可能的答案,请列出所有答案,每个答案占一行。

   格式是:人数,人数,...

   例如,有一种可能是:20,5,4,2,0

package 第四次蓝桥杯测试;
/**
 * 
 * @author MZFAITHDREAM
 *4. 海盗比酒量
有一群海盗(不多于20人),在船上比拼酒量。过程如下:打开一瓶酒,所有在场的人平分喝下,
有几个人倒下了。再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,
海盗船长也在其中。当第4瓶酒平分喝下后,大家都倒下了。
    等船长醒来,发现海盗船搁浅了。他在航海日志中写到:“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
    请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
    如果有多个可能的答案,请列出所有答案,每个答案占一行。
    格式是:人数,人数,...
    例如,有一种可能是:20,5,4,2,0
 */
public class DemoTest4 {
    public static void main(String[] args) {
      new a().f();
    } 
    }
  class a{
    public void f() {
       float i,j,q,people;
            //people是海盗总人数
            //i是第一轮剩余人数
            //j是第二轮剩余人数
            //p是第三轮剩余人数
            //第四轮就全都倒下了,不用设置变量
            //因为每一轮都有倒下的(我认为),所以每一轮的最大值都是上一轮-1(上一轮至少倒下一个的情况)
            //people>=5是我认为最少得有五个海盗
            for( people=20;people>=5;people--){
                for(i=people-1;i>=4;i--){
                    for(j=i-1;j>=3;j--){
                        for(q=j-1;q>=2;q--){
                            if(1/people+1/i+1/j+1/q==1)
                                System.out.println((int)people+" "+(int)i+" "+(int)j+" "+(int)q+" "+"0");
                        }
                    }
                }
            }
    }
  }

问题五:生日蜡烛

某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他一共吹熄了236根蜡烛。

请问,他从多少岁开始过生日party的?

请填写他开始过生日party的年龄数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

package WEB45;
/**
 * 
 * @author MZFAITHDREAM
 *生日蜡烛
某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?
请填写他开始过生日party的年龄数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
 */
public class 生日蜡烛 {
  public static void main(String[] args) {
    for (int i = 1; i < 100; i++) {
      int num=i;
      int sum=i;
      while(true) {
        num++;
        sum=sum+num;
        if(sum==236) 
        {
          System.out.print("从第"+i+"开始吹蜡烛,今年吹了"+num+"根蜡烛");
        }
        if(sum>236) {
          break;
        }
      }
    }
  }
}

问题六:世纪末的星期

package WEB45;
import java.util.Calendar;
/**
 * 
 * @author MZFAITHDREAM
 *世纪末的星期 
    曾有邪教称1999年12月31日是世界末日。当然该谣言已经不攻自破。 
    还有人称今后的某个世纪末的12月31日,如果是星期一则会.... 
    有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!  
     1999年的12月31日是星期五, 
    请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)? 
请回答该年份(只写这个4位整数,不要写12月31等多余信息)
 */
public class 世纪末的星期 {
  public static void main(String[] args) {
//    时间的的类
    Calendar c=Calendar.getInstance();
    for (int year = 1999; year < 10000; year+=100) {
      c.set(Calendar.YEAR, year);
      c.set(Calendar.MARCH, 11);
      c.set(Calendar.DAY_OF_MONTH, 31);
      if(c.get(Calendar.DAY_OF_WEEK)==1) {
        System.out.println(year);
        System.out.println("年"+c.get(Calendar.YEAR));
        System.out.println("月"+c.get(Calendar.MARCH));
        System.out.println("日"+c.get(Calendar.DAY_OF_MONTH));
        break;
      }
    }
  }
}

问题七:矩形切割

小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。

当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方

形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。

例如,对于一块两边分别为 5 和 3 的材料(记为 5 × 3),

小明会依次切出

3 × 3、

2 × 2、

1 × 1、

1 × 1 共 4 个正方形。

现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会

切出多少个正方形?

【答案提交】

这是一道结果填空的

package WEB44;
/**
 * 
 * @author MZFAITHDREAM
 *小明有一些矩形的材料,他要从这些矩形材料中切割出一些正方形。
当他面对一块矩形材料时,他总是从中间切割一刀,切出一块最大的正方
形,剩下一块矩形,然后再切割剩下的矩形材料,直到全部切为正方形为止。
例如,对于一块两边分别为 5 和 3 的材料(记为 5 × 3),
小明会依次切出
3 × 3、
2 × 2、
1 × 1、
1 × 1 共 4 个正方形。
现在小明有一块矩形的材料,两边长分别是 2019 和 324。请问小明最终会
切出多少个正方形?
【答案提交】
这是一道结果填空的
 */
public class 矩形切割 {
  public static void main(String[] args) {
    int x=2019,y=324,count=0;
    while(x>0||y>0) {
      if (x > y) {                     //2019>324
        x -= y;                      //2019-=324
        count++;                     //累加次数
      }
      if (x < y) {                     //2019<324
        y -= x;                      //324-=x;  (划重点!!)
        count++;                     //累加次数
      }
      if (x == y) {                    //减到x,y相同时,正方形就出来了!!
        count++;                     //累加次数
        System.out.println(count);   //输出结果21
        return;                      //再问,打死!!
      }
    }
    }
  }

问题八:网友的生日

某君新认识一网友。

当问及年龄时,他的网友说:

“我的年龄是个2位数,我比儿子大27岁,

如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”

请你计算:网友的年龄一共有多少种可能情况?

提示:30岁就是其中一种可能哦.

请填写表示可能情况的种数。

注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

package WEB44;
/**
 * 
 * @author MZFAITHDREAM
 *某君新认识一网友。
当问及年龄时,他的网友说:
“我的年龄是个2位数,我比儿子大27岁,
如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
请你计算:网友的年龄一共有多少种可能情况?
提示:30岁就是其中一种可能哦.
请填写表示可能情况的种数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
 */
public class 网友年龄 {
  public static void main(String[] args) {
    int count =0;
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j <=9; j++) {
        int my=i*10+1; //计算网友的年龄
        if(my>=10&&my<=90) {
          int son=my-27;
          int tmp=j*10+1;
          if(tmp==son) {
            System.out.println(my);
            count++;
          }
        }
      }
    }
    System.out.println(count);  
  }
}

问题九:有奖猜谜

package WEB44;
/**
 * 
 * @author MZFAITHDREAM
 *明很喜欢猜谜语。
最近,他被邀请参加了X星球的猜谜活动。
每位选手开始的时候都被发给777个电子币。
规则是:猜对了,手里的电子币数目翻倍,
猜错了,扣除555个电子币, 扣完为止。
小明一共猜了15条谜语。
战果为:vxvxvxvxvxvxvvx
其中v表示猜对了,x表示猜错了。
请你计算一下,小明最后手里的电子币数目是多少。
请填写表示最后电子币数目的数字。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
 */
public class 有奖猜谜 {
  public static void main(String[] args) {
    int num=777;
    //1 0
    int[] array={1,0,1,0,1,0,1,0,1,0,1,0,1,1,0};//1代表v  0代表x
    for (int i = 0; i < array.length; i++) {
      if(array[i]==1) {
        num*=2;
      }
      else {
        num-=555;
      }
    }
    System.out.println("数量"+num);
  }
}

问题十:质数

package WEB44;
/**
 * 
 * @author MZFAITHDREAM
 *我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算
第 2019 个质数是多少?
 */
public class 质数 {
  public static void main(String[] args) {
    int num=0;
    int a=1;
    while(num<2019) {
      a++;
      int i;
      for ( i = 2; i <a; i++) {
        if(a%i==0) {
          break;
        }
      }
//      if(i/a==1) 判断为质数
      if(i==a) {
        num++;
      }
    }
    System.out.println(a);
  }
}
相关文章
Com.Java.Basis第五课《针对流程控制的语句练习题》(二)
Com.Java.Basis第五课《针对流程控制的语句练习题》(二)
128 0
|
9天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
18天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
5天前
|
安全 Java 开发者
深入解读JAVA多线程:wait()、notify()、notifyAll()的奥秘
在Java多线程编程中,`wait()`、`notify()`和`notifyAll()`方法是实现线程间通信和同步的关键机制。这些方法定义在`java.lang.Object`类中,每个Java对象都可以作为线程间通信的媒介。本文将详细解析这三个方法的使用方法和最佳实践,帮助开发者更高效地进行多线程编程。 示例代码展示了如何在同步方法中使用这些方法,确保线程安全和高效的通信。
25 9
|
8天前
|
存储 安全 Java
Java多线程编程的艺术:从基础到实践####
本文深入探讨了Java多线程编程的核心概念、应用场景及其实现方式,旨在帮助开发者理解并掌握多线程编程的基本技能。文章首先概述了多线程的重要性和常见挑战,随后详细介绍了Java中创建和管理线程的两种主要方式:继承Thread类与实现Runnable接口。通过实例代码,本文展示了如何正确启动、运行及同步线程,以及如何处理线程间的通信与协作问题。最后,文章总结了多线程编程的最佳实践,为读者在实际项目中应用多线程技术提供了宝贵的参考。 ####
|
5天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
8天前
|
Java
JAVA多线程通信:为何wait()与notify()如此重要?
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是实现线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件满足时被唤醒,从而确保数据一致性和同步。相比其他通信方式,如忙等待,这些方法更高效灵活。 示例代码展示了如何在生产者-消费者模型中使用这些方法实现线程间的协调和同步。
22 3
|
7天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
8天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
18 1
|
8天前
|
Java UED
Java中的多线程编程基础与实践
【10月更文挑战第35天】在Java的世界中,多线程是提升应用性能和响应性的利器。本文将深入浅出地介绍如何在Java中创建和管理线程,以及如何利用同步机制确保数据一致性。我们将从简单的“Hello, World!”线程示例出发,逐步探索线程池的高效使用,并讨论常见的多线程问题。无论你是Java新手还是希望深化理解,这篇文章都将为你打开多线程的大门。