JAVA經典演算法,每日一題

2021-07-30 03:18:45 字數 1665 閱讀 8875

梳理思路:首先先計算出每個月兔子的數量,摸清規律再去編碼實現

第乙個月1對

第二個月1對

第三個月2對(這對祖宗兔子生了一對,這一對命名為第一代,所以是1+1)

第四個月3對(這對祖宗兔子又生了一對,這一代命名為二代,2+1)

第四個月5對(祖宗兔子又生的一對+第一代剛好長到第三個月也生的一對命名第三代,所以是3+2 = 5)

第五個月8對(祖宗兔子又生的一對+第一代又生的一對+第二代又生的一對,5+3 = 8)

第六個月13對(祖宗兔子又生的一對+第一代又生第一對+第二代又生的一對+第三代又生的一對+第一代生的小崽子又生的1對 ,所以是8+5 = 13)

… 到此為止,可以發現規律,這個1,1,2,3,5,8,13這個數列從第三項開始,每一項都等於前兩項之和。這也就是斐波那契數列。

於是開始程式設計

《一》直觀的方法

public

class program1

}}

《二》採用遞迴的方法

public

class program2

}public

static

intf(int x) else

}}

首先分析一下,什麼是素數。素數又叫質數,定義為在大於1的自然數中,除了1和它本身以外不再有其他因數的數。換到**語言裡來說,用乙個數分別去除2,3,4,..一直到sqrt(這個數),sqrt是math類中的方法,是求平方根。如果能被整除則表明此數不是素數,反之是素數。

public

class program4 else

}if (b == true)

}system.out.println("素數的個數是:" + count);

}}

public

class program }}

}

(1) 如果這個質數恰等於n,則說明分解質因數的過程已經結束,列印出結果即可。

(2) 如果n >=k,但能被k整除,則應列印出k的值,並用n除以k的值作為新的正整數n,然後重複執行第一步。

(3) 如果n不能被k整除,則k+1作為k的值,重複執行第一步。

**如下:

public

class program6 else

if (n % k == 0) else }}

}

public

class program7

}

public

class program8

}class deff

while (y != 0)

}return x;

}}

【程式8】 題目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是乙個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

1.程式分析:關鍵是計算出每一項的值。

public

class test8

system.out.println(s);

}}

演算法每日一題 07 31

魔術索引。在陣列a 0 n 1 中,有所謂的魔術索引,滿足條件a i i。給定乙個有序整數陣列,編寫一種方法找出魔術索引,若有的話,在陣列a中找出乙個魔術索引,如果沒有,則返回 1。若有多個魔術索引,返回索引值最小的乙個。示例1 輸入 nums 0,2,3,4,5 輸出 0 說明 0下標的元素為0 ...

演算法每日一題 08 03

給定兩個字串形式的非負整數 num1 和num2 計算它們的和。注意 num1 和num2 的長度都小於 5100.num1 和num2 都只包含數字 0 9.num1 和num2 都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式。class s...

演算法每日一題 08 08

題目 include using namespace std define maxn 200010 int ton maxn in maxn 存拓撲序和入度 struct node int n,m queue int q vectorask 存無向邊 vectorans 存結果 vector int...