藍橋杯java訓練題(2)

2021-09-12 02:13:01 字數 1968 閱讀 6208

1.乙個n位的十進位制正整數,如果它的每個位上的數字的n次方的和等於這個數本身,則稱其為花朵數。

例如:當n=3時,153就滿足條件,因為1∧3+5∧3+3∧3=153,這樣的數字也被稱為水仙花數(其中,「∧」表示乘方,5∧3表示5的3次方,也就是立方)。

當n=4時,1634滿足條件,因為1∧4+6∧4+3∧4+4∧4=1634.

當n=5時,92727滿足條件。

實際上,對n的每個取值,可能有多個數字滿足條件。

449177399146038697307

128468643043731391252

程式的任務是:求n=21時,所有滿足條件的花朵數。注意:這個整數有21位,它的各個數字的21次方之和正好等於這個數本身。

如果滿足條件的數字不只有乙個,請從小到大輸出所有滿足條件的數字,每個數字佔一行。因為這個數字很大,請注意解法時間上的可行性。要求程式在3分鐘內執行完畢。

ps:前情提要(1):

迴圈加遞迴能起到什麼作用?

答:起到類似多重迴圈的作用。

這裡利用迴圈加遞迴演示一下列印三位數整數的情況:

public class test

public static void find(int level,int number)

for(int i=0;i<10;i++) //遞迴函式中帶有迴圈

find(level+1,i);

} public static void printt(int test)//列印整數

{ for(int i=0;i結果:

ps:思路

(1):整體思路:

先用大整數陣列table[ ] 儲存0~9 ,10個數字的21次方。

再用迴圈加遞迴用0~9 這10個數字把 21個儲存位的整數陣列 nums[ ] 填滿(也即類似排列組合找出 21個儲存位的數字,這裡順序就沒多大關係了。因為在後續求和後,不用比較求和後的數字大小和21個順序儲存位組合的大小,而是比較求和後得到的大整數拆分成各個整數後,整數的組合是否和nums[ ]中的組合一致)。

(2)由於這裡只是在用nums[ ]儲存組合型別,和順序無關,所以我們不需要每一位都從 0 到 9遍歷,我們可以約定排序在後的數大於、等於排序在前的數,這樣同樣可以遍歷所有的組合,且可節省大量時間。

public class test6 {

private static int num=21;

private static biginteger table=new biginteger[10];

private static biginteger store=new biginteger[1000];

private static int ntotal=0;

private static int nums;

public static void main(string args)

{ for(int i=0;i<10;i++)

table[i]=biginteger.valueof(i).pow(num);

for(int i=0;i<10;i++)

table[i]=biginteger.valueof(i).pow(num);

nums=new int[num];

for(int j=0;j<10;j++)

find(nums,0,j);

if(0==ntotal)

system.out.println("沒有符合條件的數!");

藍橋杯真題訓練 2019 2題

2019第二題 小明用字母 a 對應數字 1,b 對應 2,以此類推,用 z 對應 26。對於 27 以上的數字,小明用兩位或更長位的字串來對應,例如 aa 對應 27,ab 對 應 28,az 對應 52,lq 對應 329。請問 2019 對應的字串是什麼?答案提交 這是一道結果填空的題,你只需...

藍橋杯演算法訓練題集

algo 1 區間k大數查詢 include include include include include using namespace std int a 1005 int tmp 1005 int ans 1005 bool cmp int a,int b int maxsort int l...

藍橋杯訓練day2

dna 題目描述 小強從小就喜歡生命科學,他總是好奇花草鳥獸從 來的。終於,小強上中學了,接觸到了神聖的名詞 dna.它有乙個雙螺旋的結構。這讓一根筋的小強抓破頭皮,要是能畫出來就好了 小強喊道。現在就請你幫助他吧 輸入輸入包含多組測試資料。第乙個整數n n 15 n表示組數,每組資料報含兩個整數a...