今天依旧带来几个小题目~
首先来看第一题~题目是:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多 少米?第10次反弹多高
首先我们可以知道我们要求经过了多少米以及第十次反弹的距离,首先我们需要知道,计算经过多少距离不仅仅是落下的距离还有一个反弹距离!!
这个是我的理论思路,但是还是会出现有小数的情况,所以我们需要改为double类型!然后就是在我们寻找规律时候会发现总会有两组数据是相同的,然后会出现一个单独的数,而那个数正好是反弹的距离。那我们可以设想,如果算到第九次的所有距离那么一定会出现一个反弹(因为第九次降落我们才能算完九次,然而降落就会弹起来),也就是说我们只需要循环九次,最后一次弹起来的那个数我们记录下来就是第十次反弹的距离。
java
import java.util.Random;
import java.util.Scanner;
public class day2 {
//一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,
// 求它在 第10次落地时,共经过多 少米?第10次反弹多高
public static void main1(String[] args) {
double h=100;//初始高度
double sum = 100;//第一次掉下来的先加进去
double ret;//每次反弹高度
double t_ret;
for (int i = 1; i < 10; i++) {//只循环九次,得到第九次反弹高度
ret = h/2.0;//计算反弹高度
sum+=ret*2;//反弹+下落
h=ret;
}
t_ret = h/2.0;//第十次反弹高度
System.out.println("十次总共经过"+sum+"米");
System.out.println("第十次反弹"+t_ret+"米高");
}
}
我们继续来看第二题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔都不死,问第n个月的兔子对数为多少?
第三个月开始才会每个月都生一对兔子也就是说过完完整的两个月就已经开始生了!!

上面是我的思路草稿,在第一次思考中,我发现这个规律和斐波那契数列是一样的,但是这样有过于单调了,于是我开始开辟第二种方法,果然让我想到了,通过对斐波那契概念的小改动完成,通过第三项为前二项之和来推断,思路可看上面的图
java
import java.util.Random;
import java.util.Scanner;
public class day2 {
public static int func(int n){
//首先第一个月和第二个月都是没生也就是1个
if(n==1||n==2){
return 1;
}
int a=1,b=1,c;
for (int i=3;i<=n;i++){//第三个月才开始
c=a+b;
a=b;
b=c;
}
return b;
}
public static void main(String[] args) {
//有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
// 假如兔都不死,问第n个月的兔子对数为多少
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int ret = func(n);
System.out.println("第"+n+"月后总共有"+ret+"对兔子");
}
}
继续看我们的第三题:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
我们看一下这个,虽然题目长,实际就是多加了几个2
java
import java.util.Random;
import java.util.Scanner;
public class day2 {
public static void main3(String[] args) {
//有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三
//个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
//实际就是+2
int n = 10;//第一个人
for (int i=1;i<5;i++){
n+=2;
}
System.out.println(n);
}
}
来到今天的最后一题!!给定一个3乘以3的二维数组,里面的数据随机生成。分别求出两个对角线的元素之和
这个题其实需要注意两点,应该是随机数,然后就是找对角线的规律!

其实吧对角线坐标画出来就能看到非常明显的规律啦~然后就是递推一下i的截止条件就可以啦!!
java
import java.util.Random;
import java.util.Scanner;
public class day2 {
public static void main4(String[] args) {
//给定一个3乘以3的二维数组,里面的数据随机生成。分别求出两个对角线的元素之和
int n=3;
int[][] arr = new int[n][n];
Random rand = new Random();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j]=rand.nextInt(100);//存0-99
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
int sum_a=0,sum_b=0;
for (int i = 0; i < n; i++) {
sum_a+=arr[i][i];
sum_b+=arr[i][n-1-i];
}
System.out.println("主对角线:"+sum_a);
System.out.println("副对角线:"+sum_b);
}
}
今天刷题到此结束!!点上关注我们明天再见!~~~