当前位置 : 主页 > 编程语言 > java >

java经典算法-day2

来源:互联网 收集:自由互联 发布时间:2022-09-29
哈喽,各位小伙伴们好,我是喵手。 一、前言 正值金九银十好时节,又到了刷算法题日。xdm,有空的大家一起来呀,空余时间,地铁时间等随时随地皆可,你可以不用实操,你只需要


哈喽,各位小伙伴们好,我是喵手。

一、前言

正值金九银十好时节,又到了刷算法题日。xdm,有空的大家一起来呀,空余时间,地铁时间等随时随地皆可,你可以不用实操,你只需要看题思考,完后有空coding就好呀。接下来我要开启我的刷题之旅啦,喜欢的小伙伴欢迎点赞关注哦。

二、题目描述:

题目1:

打印九九乘法表。

题目2:

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

三、思路分析:

题1:打印九九乘法表。

  • 首先我们要找九九乘法表的输出进行找规律,九九乘法表的第一行,输出1*1 = 1,就一列;
  • 然后第二行是输出两列,以此类推,我们就固定了第一层循环就只需要i从1-9,总共就九行;
  • 然后就是控制第二层嵌套,很明显,跟着第一层的i,i是几,列数就是几。
  • 所以,很明显第二层j也是从1开始,j最大只能等于i,这样就能保证呈下走楼梯状。所以总结一下,就是一共需要两层循环。
  • 然后就是进行里层不换行打印输出,但是进行新的外一轮循环,根据九九乘法表,是要换行,所以你就在你内层循环外再加上一句换行语句即可。
  • 平常直接打印对不齐,我们只需要在内层打印语句的末端,加上​​" \t"​​(\t相当于tab),这样它就可以列对齐了。

题2:古典问题:假如兔子都不死,问每个月的兔子总对数为多少?

       首先,看到这题,我们应该要有个思维,那就是找规律,可以自己先尝试枚举几个月出来,看看能否成总数上找到有何规律。

我现来,枚举看看,每个月兔子总对数分别如下。

  • 第1个月兔子总对数为:1
  • 第2个月兔子总对数为:1
  • 第3个月兔子总对数为:2
  • 第4个月兔子总对数为:3
  • 第5个月兔子总对数为:5
  • 第6个月兔子总对数为:8
  • 第7个月兔子总对数为:13
  • 第8个月兔子总对数为:21
  • 第9个月兔子总对数为:34
  • ...

       仔细一看这每个月的兔子对数,这不就是典型的斐波那契数列问题啊​​[1,1,2,3,5,8,13,21,34...]​​​,很明显就是符合斐波那契数列。针对该问题,满足函数​​f(x+2) = f(x+1)+f(x)​​。其中x表示当前月份,x+2表示当前月份的第二个月份,所以分析可得,直接一套递归带走。

四、算法实现:

题1AC代码:

/**
* 输出九九乘法表
*/
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + "*" + j + "=" + i*j+ "\t");
}
System.out.println();
}

实际控制台输出:

1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

题2AC代码:

无非就是实现这个函数:f(x) = f(x-1)+f(x-2)【其中x>=3】;

/**
* 斐波那契函数
*/
public static int fbnq(int month) {
int sum = 0;
if (0 < month && month < 3) {
sum = 1;
}
if (month >= 3) {
sum = fbnq(month - 1) + fbnq(month - 2);
}
return sum;
}

需要注意的是,由于第一个月和第二个月兔子对数都不变,所以需要单独提前告知sum的值,枚举month=1与month=2的值即可,往后就直接自我递归调用计算。

五、总结:

       综上第一题是经典题,考察的还是循环嵌套的使用,第二题就是数学问题,从你找到规律基本这道题就破了,很显然规律符合斐波那契数列,所以基本递归的思路可以很好地解决。

       如果你有更好的解题思路或者想法,欢迎评论区留言告诉我哦,喵手感激不尽。

六、文末:

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

---------------------------------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

---------------------------------------------------------------------


上一篇:Http轮询分为长查询和短查询总结
下一篇:没有了
网友评论