1.爬楼地
爬20个台阶的爬法:=f(19)+f'(18)
经典斐波拉契数列问题
public class demo4 {
//爬楼梯问题
public static void main(String[] args) {
System.out.println(getSum(20));
}
public static int getSum(int n) {
if (n == 1)
return 1;
if (n == 2)
return 2;
return getSum(n - 1) + getSum(n - 2);
}
}
2.按照要求排序问题
package lx;
import java.util.Arrays;
import java.util.Comparator;
public class demo1 {
public static void main(String[] args) {
Girlfriend g1 = new Girlfriend("zhangsan", 18, 90);
Girlfriend g2 = new Girlfriend("lisi", 19, 100);
Girlfriend g3 = new Girlfriend("wangwu", 20, 110);
//定义数组存储对象
Girlfriend[] arr = {g1, g2, g3};
// Arrays.sort(arr, new Comparator<Girlfriend>() {
/* public int compare(Girlfriend o1, Girlfriend o2) {
//按照年龄的大小进行比较,年龄一样,按照身高比较,身高一样按照姓名的字母比较
double tmp = o1.getAge() - o2.getAge();
tmp = tmp == 0 ? o1.getHeight() - o2.getHeight() : tmp;
tmp = tmp == 0 ? o1.getName().compareTo(o2.getName()) : tmp;
if (tmp < 0) {
return -1;
} else if (tmp > 0) {
return 1;
} else
return 0;
}
});*/
//lambda表达式
//()->{}
//():对应抽象方法的形参
//{}:方法体
Arrays.sort(arr, (o1, o2) -> {
//按照年龄的大小进行比较,年龄一样,按照身高比较,身高一样按照姓名的字母比较
double tmp = o1.getAge() - o2.getAge();
tmp = tmp == 0 ? o1.getHeight() - o2.getHeight() : tmp;
tmp = tmp == 0 ? o1.getName().compareTo(o2.getName()) : tmp;
if (tmp < 0) {
return -1;
} else if (tmp > 0) {
return 1;
} else
return 0;
});
System.out.println(Arrays.toString(arr));
}
}
女朋友类
package lx;
public class Girlfriend {
private String name;
private int age;
private int height;
public Girlfriend(String name, int age, int height) {
this.name = name;
this.age = age;
this.height = height;
}
public Girlfriend() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
@Override
public String toString() {
return "Girlfriend{" +
"name='" + name + '\'' +
", age=" + age +
", height=" + height +
'}';
}
}
3.兔子问题(斐波拉契数列)
package lx;
public class demo2 {
public static void main(String[] args) {
//斐波那契数列
int[] arr = new int[12];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i - 1] + arr[i - 2];
}
System.out.println(arr[11]);
}
}
4.猴子吃桃问题
package lx;
public class demo3 {
public static void main(String[] args) {
//猴子偷桃问题
/*
有一堆桃子,猴子第一天吃了其实一半,并且多吃了一个!
以后每天猴子都吃当前剩下来的一半,然后多吃一个
第10天的时候(还没有吃),发现就剩下一个桃子,请问最初总共多少个桃子
day10 1;
day9=(day10+1)*2 4
day8=(day9+1)*2 10
每一天的桃子的数量都是后一天数量+1,*2
*/
//method01();
/*
1.出口
day==10 剩下一个
2. 规律
每一天的桃子的数量都是后一天数量+1,*2
*/
System.out.println(getCount(1));
}
public static int getCount(int day) {
if (day <= 0 || day >= 11) {
System.out.println("当前时间错误");
return -1;
}
//出口
if (day == 10) {
return 1;
} else {// 每一天的桃子的数量都是后一天数量+1,*2
return (getCount(day + 1) + 1) * 2;
}
}
private static void method01() {
int day = 0;
int x = 1;
int y = 0;
for (day = 9; day >= 1; day--) {
y = (x + 1) * 2;
x = y;
}
System.out.println(y);
}
}