50道經典的JAVA編程題(41-45),苦逼的程序猿,晚上睡不着了編程吧~今天堅持做10道題!發現編程能是我快樂。。。O(∩_∩)O哈哈~能平靜我煩亂的心,剩下5道題留到考試完了再做吧!該睡覺了、、、
【程序41】 MonkeyPeach.java
題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只猴子把多的一
個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中
,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子?
注: 遞歸得到還沒拿桃子時的桃子數,每次得到的值必須是整數

javapackage test50;
/** * @author VellBibi *【程序41】 MonkeyPeach.java *題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只猴子把多的一 *個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中 *,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子? */
public class MonkeyPeach {
/** * 獲得第n個猴子還沒拿桃子時的桃子數 * 最后一個猴子拿了m個桃子 * @param n * @param m * @return */
public static int getNum(int n, int m){
if(n > 5) return m*4;
else {
double ans = getNum(n+1, m) / 4.0 * 5 + 1;
if(ans%1 != 0.0 || ans == 1){//判斷結果是否為整數,或者結果不為1
return 0;
}else
return (int)ans;
}
}
public static void main(String[] args) {
int ans = 0;
for(int i=1; ; i++){
ans = getNum(1, i);
if(ans != 0){
System.out.println("當最后一只猴子拿走" + i + "個桃子時,海灘上原來桃子得到最小值為:");
System.out.println(ans);
break;
}
}
}
}

反推數據:(驗證結果是正確的)

感覺上面的實現方案有點小題大做了,要是直接驗證結果的話會更快的得到答案,看代碼:

javapackage test50;
/** * @author VellBibi *【程序41】 MonkeyPeach_1.java *題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只猴子把多的一 *個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中 *,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子? *1.程序分析:采取直接驗證結果的方式 */
public class MonkeyPeach_1 {
public static boolean isRight(int n) {
for(int i=0; i<5; i++) {
if(n % 5 == 1) {
n = n - 1;
n = n - n / 5;
}else
return false;
}
return true;
}
public static void main(String[] args) {
for(int n=1; ; n++) {
if(isRight(n)) {
System.out.println("海灘上原來桃子得到最小值為:" + n);
return;
}
}
}
}
【程序42】 Test4.java
題目:809*??=800*??+9*??+1
其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。求??代表的兩位數,及809*??后的結果。
注:這道題很有問題啊。沒有結果~~~好生郁悶,看我的兩種理解吧
第一種:所有的??代表同一個數

javapackage test50;
/** * @author VellBibi *【程序42】 Test4.java *題目:809*??=800*??+9*??+1 *其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。求??代表的兩位數,及809*??后的結果。 */
public class Test4 {
public static void main(String[] args) {
for(int i=10; i<100 && 8*i<100 && 9*i<1000; i++){
if(809*i == (800*i + 9*i + 1)){
System.out.println("??代表的兩位數:" + i);
System.out.println("809*??后的結果" + i*809);
return;
}
}
System.out.println("沒有符合的數");
}
}
第二種:所有的??都不同

javapackage test50;
/** * @author VellBibi *【程序42】 Test4.java *題目:809*??=800*??+9*??+1 *其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。求??代表的兩位數,及809*??后的結果。 */
public class Test4_1 {
public static void main(String[] args) {
for(int i=10; i<100; i++){
for(int j=10; j<100 && 8*j<100; j++){
for(int l=10; l<100 && 9*l<1000; l++){
if(809*i == 800*j + 9*l + 1){
System.out.println("809*"+i+" == 800*"+j+"+ 9*"+l+" + 1");
System.out.println("809*??后的結果" + i*809);
return;
}
}
}
}
System.out.println("沒有符合的數");
}
}
【程序43】 Test5.java
題目:求0—7所能組成的奇數個數。
注:當有一位數時:有1.3.5.7這4個奇數
當有兩位數時:最高為有7種(除0)選擇,最低為有4(1.3.5.7為奇數的條件)種 總數為4*7
當有三位數時:最高為有7中(除0)選擇,第二位有8中選擇,最后一位4種(1.3.5.7) 總數 4*8*7
當有四位數時:最高為有7中(除0)選擇,第三位有8中選擇,第二位有8中選擇,最后一位4種(1.3.5.7) 總數 4*8*8*7
*
*
*
依次類推

javapackage test50;
/** * @author VellBibi *【程序43】 Test5.java *題目:求0—7所能組成的奇數個數。 * 注:當有一位數時:有1.3.5.7這4個奇數 * 當有兩位數時:最高為有7種(除0)選擇,最低為有4(1.3.5.7為奇數的條件)種 總數為4*7 * 當有三位數時:最高為有7中(除0)選擇,第二位有8中選擇,最后一位4種(1.3.5.7) 總數 4*8*7 * 當有四位數時:最高為有7中(除0)選擇,第三位有8中選擇,第二位有8中選擇,最后一位4種(1.3.5.7) 總數 4*8*8*7 */
public class Test5 {
public static void main(String[] args) {
int cup = 7*4;//二位數
int count = cup + 4;
for(int i=2; i<8; i++){
cup = 8*cup;
count = count + cup;
}
System.out.println("0—7所能組成的奇數個數:" + count);
}
}
【程序44】 TestEven.java
題目:一個偶數總能表示為兩個素數之和。

javapackage test50;
import java.util.Scanner;
/** * @author VellBibi *【程序44】 TestEven.java *題目:一個偶數總能表示為兩個素數之和。 */
public class TestEven {
/** * 判斷n是不是質數 * @param n * @return */
public static boolean isPrimeNumber(int n){
if(n < 2)return false;
for(int i=2; i<n; i++){
if(n%i == 0)
return false;
}
return true;
}
public static void main(String[] args) {
int n = new Scanner(System.in).nextInt();
if(n%2 != 0){
System.out.println("輸入的不是偶數");
return;
}
for(int i=2; i<n; i++){
if(isPrimeNumber(i) && isPrimeNumber(n - i)){
System.out.println(n + " = " + i + "+" + (n-i));
return;
}
}
}
}
【程序45】TestPrime9.java
題目:判斷一個素數能被幾個9整除
這個題貌是有問題吧,素數只能被1和自身整除啊,9都不是素數。。。無解