文章目錄
1. 實例 21
1.1 題目
猴子喫桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子喫掉一半,又多吃了一個。以後每天早上都吃了前一天剩下
的一半零一個。到第10天早上想再喫時,見只剩下一個桃子了。求第一天共摘了多少。
1.2 思路
- 設第一天桃子數爲 ,則第二天桃子數爲 ,第三天桃子數爲 …
- 反過來推,則
- 以此類推,從第 10 天類推到第一天是一個循環
1.3 代碼
/**
* @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);
}
}
1.4 結果
桃子總數:1534
2. 實例 22
2.1 題目
兩個乒乓球隊進行比賽,各出三人。甲隊爲a,b,c三人,乙隊爲x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。
2.2 思路
見代碼註釋即可
2.3 代碼
/**
* @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);
}
}
}
}
}
}
}
2.4 結果
對陣順序表:
a --> z b --> x c --> y
3. 實例 23
3.1 題目
打印出如下圖案(菱形)。
* *** ***** ******* ***** *** *
3.2 思路
圖形可拆分爲兩部分來看待,前四行一個規律,後三行一個規律,利用雙重for循環,第一層控制行,第二層控制列
3.3 代碼
/**
* @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();
}
}
}
3.4 結果
*
***
*****
*******
*****
***
*
4. 實例 24
4.1 題目
有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13…求出這個數列的前20項之和。
4.2 思路
從第 2 個數開始,後一個數的分母是前一個的分子,而分子則是前一個數的分子與分母之和
4.3 代碼
/**
* @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);
}
}
4.4 結果
最終結果:32.660260796546936
5. 實例 25
5.1 題目
求 的和。
5.2 思路
類似於累加,詳細情況見代碼。
5.3 代碼
/**
* @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);
}
}
5.4 結果
最終結果:2561327494111820313