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...