❝猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 ❞
/**
* @ClassName : TwentyOne
* @Author : cunyu
* @Date : 2020/6/23 7:59
* @Version : 1.0
* @Description : 实例 21
**/
public class TwentyOne {
public static void main(String[] args) throws Exception {
// num:第10天的桃子数
int num = 1;
// 总的桃子数
int sum = 0;
// 逆向推,前一天的桃子数 = 2 * (后一天桃子数 + 1),前边有 9 天,所以循环 9 次
for (int i = 0; i < 9; i++) {
sum = 2 * (num + 1);
num = sum;
}
System.out.println("桃子总数:" + sum);
}
}
桃子总数:1534
❝两个乒乓球队进行比赛,各出三人。甲队为 a,b,c 三人,乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和 x 比,c 说他不和 x,z 比,请编程序找出三队赛手的名单。 ❞
见代码注释即可
/**
* @ClassName : TwentyTwo
* @Author : cunyu
* @Date : 2020/6/23 8:27
* @Version : 1.0
* @Description : 实例 22
**/
public class TwentyTwo {
public static void main(String[] args) throws Exception {
char a, b, c;
System.out.println("对阵顺序表:");
// 事先 a,b,c 均可能对阵上 x,y,z
for (a = 'x'; a <= 'z'; a++) {
for (b = 'x'; b <= 'z'; b++) {
for (c = 'x'; c <= 'z'; c++) {
// a 不对阵 x,c 不对阵 x,z
if (a != 'x' && c != 'x' && c != 'z') {
// a,b,c 对阵选手不同
if (a != b && a != c && b != c) {
System.out.format("a --> %c\t b --> %c\tc --> %c", a, b, c);
}
}
}
}
}
}
}
对阵顺序表:
a --> z b --> x c --> y
❝
打印出如下图案(菱形)。
*
***
*****
*******
*****
***
*
❞
图形可拆分为两部分来看待,前四行一个规律,后三行一个规律,利用双重 for 循环,第一层控制行,第二层控制列
/**
* @ClassName : TwentyThree
* @Author : cunyu
* @Date : 2020/6/23 8:41
* @Version : 1.0
* @Description : 实例 23
**/
public class TwentyThree {
public static void main(String[] args) throws Exception {
// 上半部分
for (int i = 0; i < 4; i++) {
for (int j = 4; j > i + 1; j--) {
// 输出左上角位置的空白
System.out.print(" ");
}
for (int j = 0; j < 2 * i + 1; j++) {
// 输出菱形上半部边缘
System.out.print("*");
}
// 换行
System.out.println();
}
// 下半部分
for (int i = 0; i < 3; i++) {
for (int j = 0; j < i + 1; j++) {
// 输出菱形左下角空白
System.out.print(" ");
}
for (int j = 0; j < 2 * (3 - i) - 1; j++) {
// 输出菱形下半部边缘
System.out.print("*");
}
// 换行
System.out.println();
}
}
}
*
***
*****
*******
*****
***
*
❝有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和。 ❞
从第 2 个数开始,后一个数的分母是前一个的分子,而分子则是前一个数的分子与分母之和
/**
* @ClassName : TwentyFour
* @Author : cunyu
* @Date : 2020/6/23 8:59
* @Version : 1.0
* @Description : 实例 24
**/
public class TwentyFour {
public static void main(String[] args) throws Exception {
double sum = 0.0;
float numerator = 2.0f;
float denominator = 1.0f;
// 从第 2 个数开始
for (int i = 1; i <= 20; i++) {
sum = sum + numerator / denominator;
float tmp = denominator;
// 后一个数的分母等于前一个数的分子
// 而后一个数的分子等于前一个数的分子分母之和
denominator = numerator;
numerator += tmp;
}
System.out.println("最终结果:" + sum);
}
}
最终结果:32.660260796546936
❝求 的和。 ❞
类似于累加,详细情况见代码。
/**
* @ClassName : TwentyFive
* @Author : cunyu
* @Date : 2020/6/23 9:12
* @Version : 1.0
* @Description : 实例 25
**/
public class TwentyFive {
public static void main(String[] args) throws Exception {
// 最终结果和第一个值
long sum = 0;
long num = 1;
for (int i = 1; i <= 20; i++) {
// i = 1,num = 1
// i = 2,num = 1 * 2
// i = 3,num = 1 * 2 * 3
num = i * num;
// 求和
sum += num;
}
System.out.println("最终结果:" + sum);
}
}
最终结果:2561327494111820313