一、计算圆周率

中国古代数学家研究出了计算圆周率最简单的办法:

PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17......

这个算式的结果会无限接近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在3.1415926和3.1415927之间,

请编程计算,要想得到这样的结果,他要经过多少次加减法运算?

分析:

这题的关键是要实现PI=4/1-4/3+4/5-4/7+4/9-4/11+4/13-4/15+4/17...... 这一个表达式的计算。

通过找规律可以发现,不管计算次数为多少,加的数的分母部分都是4,而分子部分后一个分子为前一个分子取反后+2 或 -2 (此时

分子为负数时,下一个分子为此时分子取反+2 ;此时分子为正数时,下一个分子为此时分子取反-2 。找到计算规律就可以通过for循环

来计算PI了。

当然也可以这样找规律:当计算次数为偶数时,分母为-4 ;计算次数为奇数时,分母为4。 而分子的值显然为1+2*(计算次数-1)。通

过这个规律,也可以轻松实现计算。这里我采用的是上一个方式。

代码实现如下:

1 public class Test01 {

2

3 public static void main(String[] args) {

4 double p = 0; //计算的PI值

5 int j=1; //分子

6 for(int i=1;true;i++) { //自造死循环进行运算

7 p += 4.0/j;

8 if(j>0) { //若j为正数,下一个j为此时j取反-2

9 j=-j-2;

10 }else { //若j为负数,下一个j为此时j取反+2

11 j=-j+2;

12 }

13 if(p>=3.1415926 && p<=3.1415927) { //运算出的PI符合精度要求,则输出计算次数i,并跳出循环

14 System.out.println(i);

15 break;

16 }

17 }

18 }

19 }

二、围圈报数问题

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

分析:

采用数组列表ArrayList存储这n个人的数据,索引为0到(n-1),存储的值为索引+1,即每个人原来位置的标号。

然后采用一个变量number来表示报数的数,遍历列表,遍历一个元素number就+1 ,当number为3的倍数时,即报数报到3,则移除此时遍历到

的这个元素,直到列表中只剩下一个元素,打印这个元素即可。

注:

1、 number一直加下去,遍历第一轮报数后移除部分元素的新列表时,number从上个列表报的数继续+1 ,这样才能实现转圈报数。

2、 number为3的倍数时,移除列表中的元素,我采用先置该位置元素为0,遍历完这个列表后才统一通过removeAll()方法移除所有值为0

的元素。这样才不会影响这一次的遍历。若在遍历中直接移除该元素,那么此次遍历的下一循环遍历的就已经不是之前的列表了。

代码实现如下:

1 import java.util.ArrayList;

2 import java.util.List;

3 import java.util.Scanner;

4

5 public class Test02 {

6

7 public static void main(String[] args) {

8 Scanner s = new Scanner(System.in);

9 System.out.println("请输入n的值:");

10 int n = s.nextInt();

11 s.close();

12

13 List list = new ArrayList<>(); //人物列表list

14 List list0 = new ArrayList<>(); //声明一个集合list0,只存入一个元素0

15 list0.add(0);

16 for(int i=1;i<=n;i++) { //在列表中依次存入每个人的位置

17 list.add(i);

18 }

19 System.out.println(list);

20

21 int number=1; //报数的数

22 while(true) {

23

24 for (int i = 0; i < list.size(); i++) {

25 if(number%3==0) { //若报数报到3,则此人出圈

26 System.out.print(list.get(i)+"号出圈 ");

27 list.set(i, 0); //将出圈之人位置处元素置为0

28 }

29 number++; //报数

30 }

31 System.out.println();

32 list.removeAll(list0); //报完一圈数后移除列表中所有值为0的元素(即将出圈之人在列表中移除)

33 System.out.println(list);

34

35 if(list.size()==1) { //当列表长度为1时,打印出该元素的值,即为原来排的位数,并跳出循环

36 System.out.println("留到最后的为:"+list.get(0));

37 break;

38 }

39 }

40 }

41 }

标签:练习题,分子,遍历,Java,编程,number,列表,计算,报数

来源: https://www.cnblogs.com/czxoy/p/10827289.html

java请输入第一个人,Java-每日编程练习题③相关推荐

  1. python请输入第一个数请输入第二个数_Python小白学习之路(四)——第一次练习题...

    写在前面: 今天下雪了呢!连着两天都没有更新学习记录. 我没有偷懒呢.做了一天的练习题,昨天学的内容还没总结完,太累了就回去睡觉了 连续一周早起,强大的内心也无法支撑我疲惫的身体 今天早起做了整理.加 ...

  2. java请输入三个成绩 求平均分_Java编程,定义一个学生类,输入3个学生数据,输出平均分和总分...

    展开全部 import java.util.Scanner; import java.text.DecimalFormat; public class 数组问题 { public static voi ...

  3. JAVA——请输入打印一个倒99乘法口诀

    一.请输入打印一个倒99乘法口诀 19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 99=81 18=8 28=16 38=24 48=32 58=40 6 ...

  4. java 取视频第一帧,java获取视频的第一帧

    //------------maven配置文件--------------- org.bytedeco javacv 0.8 /** * 获取指定视频的帧并保存为图片至指定目录 * @param vi ...

  5. 《跟旺旺老师学Java》_第一章Java简介与JDK部署_第一部分Java是什么

    第一章:Java简介与JDK部署 第一部分:java是什么 "是白云,是瀑布,是海滩,不---,都不是,这是太原大理石二厂生产的景云牌大理石"看到这个标题,脑海中莫名的闪过这句小时 ...

  6. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  7. 虞小约的Java之旅第一天(Java的基本格式)

    文章目录 ---------序章--------- @虞小约的Java之旅 ---------第一章--------- *1.1.1 java的基本格式* 知识点: ---------序章------ ...

  8. java 检查输入_在java中检查输入的问题

    标题是欺骗,但我真的不知道如何问这个. 我正在玩java.这是我的代码: package zodiac; import java.util.Scanner; public class Zodiac { ...

  9. java jtextfield 输入_【java】JTextField与JComboBox结合动态匹配输入信息

    一.实现效果 二.代码 Java代码   importjava.awt.*; importjava.awt.event.*; importjava.util.*; importjavax.swing. ...

最新文章

  1. win10软件拒绝访问删不掉_进程拒绝访问怎么结束_win10关闭进程拒绝访问的处理方法...
  2. Qt中使用C++的方式
  3. 首家中国快递公司赴美上市!总市值达141亿美元
  4. Linux进程和计划任务管理
  5. MySQL 特殊参数
  6. iptables二之防火墙SNAT源地址转换,MASQUERADE地址伪装之DNAT目标地址转换讲解和实验演示...
  7. python的线程组怎么写_Python学习——Python线程
  8. .NET 产品版权保护方案 (.NET源码加密保护)
  9. (10)Verilog HDL异步复位同步释放
  10. JavaScript PopUp生成器
  11. 杭电第七次作业c语言短学期,杭电短学期:算法与编程.doc
  12. vue router-link子级返回父级页面
  13. (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  14. 【JSOI2008】【bzoj1012】最大数maxnumber
  15. 基于JavaWeb的物流管理系统的设计与实现
  16. Java多线程常用面试题(含答案,精心总结整理)
  17. umijs 隐藏开发工具_Umi UI 插件开发 - UmiJS 中文文档
  18. 计算机启动方式如何选择USB启动,如何设置电脑从usb启动详细方法
  19. kafka分布式集群的操作
  20. PowerPivot——DAX(初识)

热门文章

  1. UG二次开发装配篇 添加/拖动/删除组件方法的实现
  2. 一次 Young GC 的优化实践(FinalReference 相关)
  3. 关于activity的生命周期1
  4. 漫画告诉你:区块链到底是什么?
  5. CSDN竞赛6期题解
  6. TLS Origination for Egress Traffic(0.8)
  7. 子网掩码是什么,IP段的24是什么写法(CIDR写法,斜杠记法斜线记法)
  8. Java 基础 第3阶段:高级应用——尚硅谷学习笔记(含面试题) 2023年
  9. CentOS安装sun java
  10. 配饰 女生的第二件衣服