首页 > 编程语言 >Java经典面试算法2

Java经典面试算法2

时间:2022-10-29 16:22:40浏览次数:53  
标签:Java int System 兔子 month 面试 算法 猴子 public

二:经典算法问题?

  2.1鸡兔同笼问题(穷举法)

           已知:鸡兔共35只,共94只脚,那么鸡和兔各几只?

           示例代码:

 1 public class SameCage {
 2     public static void main(String[] args) {
 3         //循环变量j,控制小鸡的个数: 0到35递增
 4         //循环变量t,控制兔子的个数: 35到0递减
 5         for(int j=0,t=35; j<=35; j++,t--) {//如果有多个小条件,用逗号隔开
 6             //保证脚的数量是94
 7             if(j*2 + t*4 == 94) {
 8                 System.out.println("鸡:"+j+", 兔:"+t);
 9             }
10         }
11     }
12 }

            输出结果:

            鸡:23, 兔:12

  2.2斐波那契问题

            已知:斐波那契数列的前几个数分别为0,1,1,2,3,5…从第三项开始,每一项都等于前两项的和.请接收用户输入的整数n,求出此数列的前n项.

           斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……

          其规律很明显,从第3个数开始,每个数都等于它前两个数的和。

         下面我们可以通过用户输入的数字n来输出斐波那契数列的前n项

         示例代码:

 1 public class Faibonacci {
 2     public static void main(String[] args) {
 3         System.out.println("请输入您要测试的数:");
 4         int n = new Scanner(System.in).nextInt();
 5         //判断n是否是不正常的范围
 6         if(n<1){
 7             System.out.println("输入数据有误!!!");
 8         }
 9         //n==1
10         if(n==1){
11             System.out.println(0);
12         }
13         //n==2
14         if(n==2){
15             System.out.println(0+"\t"+1);
16         }
17         //n==3
18         if(n==3){
19             System.out.println(0+"\t"+1+"\t"+1);
20         }
21         //拼接前n项
22         if(n>3){
23             System.out.print(0+"\t"+1+"\t"+1+"\t");
24         }
25         //循环输出后面的数据
26         int f1=1;
27         int f2=1;
28         int next=0;
29         for(int i=4;i<=n;i++){
30             next=f1+f2;
31             f1=f2;
32             f2=next;
33             System.out.print(next+"\t");
34         }
35     }
36 }

            如: 输入 10

            结果为: 0 1 1 2 3 5 8 13 21 34

  2.3打印100以内除了尾数为3,5,7的所有数

            示例代码:       

 1 public class ForContinue {
 2     public static void main(String[] args) {
 3         System.out.println("结果为:");
 4         for(int i=1;i<=100;i++) {
 5             int y = i%10;//100以内的数,通过取余求出尾数
 6             if(y==3 || y==5 || y==7) {
 7                 continue;//如果尾数为3 5 7 ,则跳过后面的打印,进行下一轮循环
 8             }
 9             System.out.print(" "+i);
10         }
11     }
12 }

           输出结果:  1 2 4 6 8 9 10 11 12 14 16 18 19 20 21 22 24 26 28 29 30 31 32 34 36 38 39 40 41 42 44 46 48 49 50 51 52 54 56 58 59 60 61

         62 64 66 68 69 70 71 72 74 76 78 79 80 81 82 84 86 88 89 90 91 92 94 96 98 99 100

  2.4求猴子大王

              15个猴子围成一圈选大王,依次1-7循环报数,报到7的猴子被淘汰,直到最后一只猴子称为大王,问:哪只猴子会成为大王?

              示例代码:

 1 public class MonkeyKing {
 2     public static void main(String[] args) {
 3         //1.定义长度为15的数组保存猴子,boolean类型是为了判断猴子是否存活
 4         boolean[] b=new boolean[15];
 5 
 6         //2.依次遍历每一只猴子
 7         //true---未淘汰  false---已淘汰
 8         for(int i=0;i<b.length;i++){
 9             b[i]=true;//先把所有猴子设置成存活
10         }
11         //3.定义变量保存猴子报的数
12         int num=0;
13         //4.定义变量保存剩余的猴子数
14         int monkeyLeft=15;
15         //5.定义数组下标
16         int index=0;
17         //6.循环,直到只剩最后一只猴子(猴子王)
18         while(monkeyLeft>1){//判断条件
19             //7.检测猴子是否已淘汰
20             if(b[index]){
21                 //8.报数
22                 num++;
23                 //9.判断报数是否为7
24                 if(num==7){
25                     b[index]=false;//为7淘汰
26                     monkeyLeft--;//猴子数减一
27                     num=0;//报数归零
28                 }
29 
30             }
31 
32             //10.下标移动
33             index++;
34             //11.围成一圈---最后一个置为0
35             if(index==15){
36                 index=0;
37             }
38         }
39 
40         //遍历数组,找到最后活着的那个猴子王
41         for(int i=0;i<b.length;i++){
42             if(b[i]){
43                 System.out.println(i+1);
44             }
45         }
46     }
47 }

           输出结果: 5

  2.5古典问题:生兔子问题

             有一对兔子,从出生后第3个月起都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月兔子的对数为多少?

             程序分析:前两个月兔子的对数为1

             从第三个月开始,兔子的对数变成了 2 3 5 8 13 21 …

             示例代码:

 1 public class GetRabbitNum {
 2     public static void main(String[] args) {
 3         System.out.println("请输入要判断的月数:");
 4         int month = new Scanner(System.in).nextInt();
 5         System.out.println("第"+month+"月兔子的对数为:"+getSum(month));
 6     }
 7 
 8     public static int getSum(int month) {
 9         //如果是前两个月,还是1对兔子
10         if(month == 1 || month == 2) {
11             return 1;
12         }else {
13             //从第三个开始,兔子按照2 3 5 8 13 21变化
14             return getSum(month-1)+getSum(month-2);
15         }
16     }

          请输入要判断的月数: 12

          第12月兔子的对数为:144

 

  2.6打印水仙花数

 

  2.7回文问题

 

  2.8二分法查找

 

  2.9完数问题

 

  2.10杨辉三角

标签:Java,int,System,兔子,month,面试,算法,猴子,public
From: https://www.cnblogs.com/zhaosq/p/16810976.html

相关文章

  • Java 第二阶段总结
    前言经过了这几次大作业的洗礼,我已经对Java的三大基本特性有了一个初步的认识。接下来,我会对每次的作业作一个简单的分析,以下将从知识点、题量、难度等方面讲述。1.知......
  • Java注解
    1.Java注解的描述java注解又叫做java标注,是java的一种注释机制,在jdk5.0引入。其可以作用在类、方法、变量、参数和包上。另外,其可以通过反射来获取注解标注的内容。可以说......
  • JAVA-图片打乱
    packagecom.itheima;importjavax.swing.*;importjava.util.Random;publicclassshuzu09{publicstaticvoidmain(String[]args){//创建窗体对......
  • Javascript学习随笔
    JavaScript:简称JS,是一个运行在客户端/浏览器的【解释性】【弱类型】【面向对象】脚本语言。想要运行js需要运行环境:浏览器自带js解释器node.js需要安装环境编译型:在......
  • java pta第二次阶段性总结
    一、前言     经过这三次的pta训练,我对java再一次有了一个新的认识,这三次比起之前难度更大,所涉及的知识点更多。第4、5次作业是在前几次作业上的再次拓展,由三角形拓......
  • JAVA-图片展示
    packagecom.itheima;importjavax.swing.*;publicclassshuzu08{publicstaticvoidmain(String[]args){//创建窗体对象JFramejf=new......
  • javaSE day02
    字面量888888  80 说明一下首先“id”不足8个字符,所以要加”\t“补全,但是”20204206“满足八个字符,添加就会加8个空格,不添加就会造成与后文相连,所以上......
  • java基础-->数组
    **#数组介绍数组指的是一种容器,可以用来存储同种数据类型的多个值。数组容器在存储数据的时候,需要结合隐式转换考虑。下面写的都是一维数组,多维数组就是多个中括号即......
  • 从新开始学JAVA - IDEA
    什么是IDE全称是集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成......
  • 代码随想录算法训练营第三天 | 203.移除链表元素 、707.设计链表、 206.反转链表
    链表这个数据结构我很少用到,本科的时候学过忘的都差不多了,感谢知道了可以直接添加一个虚拟头的操作!203.移除链表元素  707.设计链表: 206.反转链表未完成 ......