2021-08-08
Java经典编程例题(七)
20、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
package test; public class test17 { public static void main(String[] args) { // TODO Auto-generated method stub int sum = 1; for (int i = 1; i <= 9; i++) { sum = (sum + 1) * 2; } System.out.println("第一天共摘了" + sum + "个桃子"); } }
分析:可以用for循环,也可以用方法的递归。
需要注意的点:用for循环时一共循环了九次
21、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
三队赛手的名单。
package test; public class test18 { public static void main(String[] args) { char a, b, c; for (a = 'x'; a <= 'z'; a++) { for (b = 'x'; b <= 'z'; b++) { for (c = 'x'; c <= 'z'; c++) { if (a != b && b != c && a != c) { // 避免参赛队员重复比赛 if (a != 'x' && c != 'x' && c != 'z') { // 根据题意判断 System.out.println("a和" + a + ",b和" + b + ",c和" + c + "进行比赛"); } } } } } } }
分析:通过三层for循环历遍所有可能性,通过题意设置判断语句
需要注意的点:在判断之前需要设置if语句排除三个队员重复参赛
22、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
分析:可以看出,除第一项外,下一项的分子等于上一项的分子加上分母,下一项的分母
等于上一项的分子
package test; public class test20 { public static void main(String[] args) { // TODO Auto-generated method stub int zi = 2, mu = 1; int temp = 0; double sum = 0; for (int i = 0; i < 20; i++) { sum += zi / mu; temp = zi; zi += mu; mu = temp; } System.out.println(sum); } }
需要注意的点:对下一项的分子和分母复制时借助临时变量
23、求1+2!+3!+…+20!的和。
分析:写个求阶乘的方法,再在循环中调用即可
package test2; import java.util.Scanner; public class tset21 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int x = 20; long m = 0; for (int i = 1; i <= x; i++) { m += di(i); } System.out.println(m); } public static long di(int x) { long sum = 1; for (int i = 1; i <= x; i++) { sum *= i; } return sum; } }
需要注意的点:sum和m的值应该用long类型
24、利用递归方法求5!。
package test2; public class test22 { public static void main(String[] args) { // TODO Auto-generated method stub test22 t = new test22(); System.out.println(t.d(5)); } public int d(int x) { if (x == 1) return 1; else return x * d(x - 1); } }
分析:关键是递归的代码
需要注意的点:在截图中用的递归方法不是静态(static)的,所以如果想要使用需要先实例化这个方法所属于的类
明天继续