第五屆藍橋杯Java語言C組_單位分數
可以把1分解為若干個互不相同的單位分數之和。
例如:
1 = 1/2 + 1/3 + 1/9 + 1/18
1 = 1/2 + 1/3 + 1/10 + 1/15
1 = 1/3 + 1/5 + 1/7 + 1/9 + 1/11 + 1/15 + 1/35 + 1/45 + 1/231
等等,類似這樣的分解無窮無盡。
我們增加一個約束條件:最大的分母必須不超過30
請你求出分解為n項時的所有不同分解法。
資料格式要求:
輸入一個整數n,表示要分解為n項(n<12)
輸出分解後的單位分數項,中間用一個空格分開。
每種分解法佔用一行,行間的順序按照分母從小到大排序。
例如,
輸入:
4
程式應該輸出:
1/2 1/3 1/8 1/24
1/2 1/3 1/9 1/18
1/2 1/3 1/10 1/15
1/2 1/4 1/5 1/20
1/2 1/4 1/6 1/12
再例如,
輸入:
5
程式應該輸出:
1/2 1/3 1/12 1/21 1/28
1/2 1/4 1/6 1/21 1/28
1/2 1/4 1/7 1/14 1/28
1/2 1/4 1/8 1/12 1/24
1/2 1/4 1/9 1/12 1/18
1/2 1/4 1/10 1/12 1/15
1/2 1/5 1/6 1/12 1/20
1/3 1/4 1/5 1/6 1/20
資源約定:
峰值記憶體消耗(含虛擬機器) < 256M
CPU消耗 < 2000ms
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。
所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效程式碼處理。
解析:這道題目有問題,分母應該是小於30。這道題目要用遞迴去寫,由於分數運算會導致精度丟失,所以
必須用求出最小公倍數的方法來解決這道題目。
import java.util.Scanner; public class Main { static long tmp = 2329089562800l;//求出1-30的最小公倍數 /** * * @param arr 儲存分母的陣列 * @param k 當前下標位置 * @param t 前面一個分母 */ public static void f2(int arr[], int k, int t, long res) { if (k == arr.length) { long sum = 0; if (res == tmp) { for (int i = 0; i < arr.length; i++) { // if (i == arr.length - 1) { // System.out.println("1/" + arr[i]); // } else { // System.out.print("1/" + arr[i] + " "); // } System.out.print(arr[i] + " "); } System.out.println(); } return; } if (k == arr.length - 3) {//在這個位置檢查前面的項數和是否超過了1 if (res > tmp) { return; } } for (int i = t + 1; i < 30; i++) {//題目應該是分母不能超過30 arr[k] = i; f2(arr, k + 1, i, res + tmp / i); } } public static void main(String[] args) { Scanner input = new Scanner(System.in); while (input.hasNext()) { int n = input.nextInt(); //計算開始時間 long start = System.currentTimeMillis(); int arr[] = new int[n]; f2(arr, 0, 0, 0); //計算結束時間 long end = System.currentTimeMillis(); //得到程式執行所耗時間 System.out.println("time=" + (end - start)); } } }
相關推薦
第五屆藍橋杯Java語言C組_單位分數
形如:1/a 的分數稱為單位分數。 可以把1分解為若干個互不相同的單位分數之和。 例如: 1 = 1/2 + 1/3 + 1/9 + 1/18 1 = 1/2 + 1/3 + 1/10 + 1/15
第五屆藍橋杯Java語言C組_調和級數
1/1 + 1/2 + 1/3 + 1/4 + ... 在數學上稱為調和級數。 它是發散的,也就是說,只要加上足夠多的項,就可以得到任意大的數字。 但是,它發散的很慢: 前1項和達到 1.0 前4項
第七屆藍橋杯Java語言B組真題(省賽)
今天參加藍橋JAVA語言B組的競賽剛剛結束,把真題和大家分享一下。 1.煤球數目 (結果填空) 有一堆煤球,堆成三角稜錐形。具體: 第一層放1個, 第二層3個(排列成三角形), 第三層6個(排列成三角形), 第四層10個(排列成三角形), .... 如果一共有100
2014第五屆藍橋杯JAVA本科B組試題第三題猜字母
把abcd...s共19個字母組成的序列重複拼接106次,得到長度為2014的串。 接下來刪除第1個字母(即開頭的字母a),以及第3個,第5個等所有奇數位置的字母。 得到的新串再進行刪除奇數位置字母的動作。如此下去,最後只剩下一個字母,請寫出該字母。答案是一個小寫
2014年第五屆藍橋杯JAVA/JAVA++程式設計本科B組決賽 出棧次序(結果填空)
出棧次序 X星球特別講究秩序,所有道路都是單行線。一個甲殼蟲車隊,共16輛車,按照編號先後發車,夾在其它車流中,緩緩前行。 路邊有個死衚衕,只能容一輛車通過,是臨時的檢查站,如圖【p1.png】所示。 X星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。 如果車輛進
第五屆藍橋杯java B組國賽題目
1.標題:國王的遺產 X國是個小國。國王K有6個兒子。在臨終前,K國王立下遺囑:國王的一批牛作為遺產要分給他的6個兒子。 其中,大兒子分1/4,二兒子1/5,三兒子1/6,.... 直到小兒子分1/9。 牛是活的,不能把一頭牛切開分。 最後還剩下11
16藍橋杯--JAVA語言C組-第10題-密碼脫落
X星球的考古學家發現了一批古代留下來的密碼。 這些密碼是由A、B、C、D 四種植物的種子串成的序列。 仔細分析發現,這些密碼串當初應該是前後對稱的(也就是我們說的映象串)。 由於年代久遠,其中
第五屆藍橋杯軟體大賽C/C++本科B組決賽解題報告
3,訊號匹配 從X星球接收了一個數字訊號序列。 現有一個已知的樣板序列。需要在訊號序列中查詢它首次出現的位置。這類似於串的匹配操作 如果訊號序列較長,樣板序列中重複數字較多,就應當注意比較的策略了。可以仿照串的KMP演算法,進行無回溯的匹配。這種匹配方法的關鍵是構造next陣列。
第五屆藍橋杯Java題目:猜字母
標題:猜字母 把abcd...s共19個字母組成的序列重複拼接106次,得到長度為2014的串。 接下來刪除第1個字母(即開頭的字母a),以及第3個,第5個等所有奇數位置的字母。 得到的新串再進行刪除奇數位置字母的動作。如此下去,最後只剩下一
第五屆藍橋杯Java B組真題——猜字母
package lanqiaobei; /* 標題:猜字母 把abcd...s共19個字母組成的序列重複拼接106次,得到長度為2014的串。 接下來刪除第1個字母(即開頭的字母a),
2016第七屆藍橋杯省賽C組試題及部分答案
答案都是自己理解的 1.報紙頁數 X星球日報和我們地球的城市早報是一樣的,都是一些單獨的紙張疊在一起而已。每張紙印有4版。比如,某張報紙包含的4頁是:5,6,11,12,可以確定它應該是最上邊的第2張報紙。我們在太空中撿到了一張X星球的報紙,4個頁碼分別是: 1125,11
第五屆藍橋杯省賽JavaB組第五題圓周率
標題:圓周率 數學發展歷史上,圓周率的計算曾有許多有趣甚至是傳奇的故事。其中許多方法都涉及無窮級數。 圖1.png中所示,就是一種用連分數的形式表示的圓周率求法。 下面的程式實現了該求
第五屆藍橋杯省賽JavaB組第六題奇怪的分式
標題:奇怪的分式 上小學的時候,小明經常自己發明新演算法。一次,老師出的題目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (參見圖1.pn
2014 第五屆藍橋杯軟體本科A組預賽題解(填空及程式碼填空)
第一題: 標題:猜年齡 小明帶兩個妹妹參加元宵燈會。別人問她們多大了,她們調皮地說:“我們倆的年齡之積是年齡之和的6倍”。小明又補充說:“她們可不是雙胞胎,年齡差肯定也不超過8歲啊。” 請你寫出:小明的較小的妹妹的年齡。注意: 只寫一個人的年齡數字,請通
藍橋杯JAVA語言B組_九陣列分數
題目:九陣列分數 1,2,3...9 這九個數字組成一個分數,其值恰好為1/3,如何組法?下面的程式實現了該功能,請填寫劃線部分缺失的程式碼。 public class A { public static void test(int[] x) { int a =
藍橋杯JAVA語言B組_圓周率
標題:圓周率 數學發展歷史上,圓周率的計算曾有許多有趣甚至是傳奇的故事。其中許多方法都涉及無窮級數。 圖1.png中所示,就是一種用連分數的形式表示的圓周率求法。 下面的程式實現了該求解方法。實際上數列的收斂對x的初始值 並不敏感。 結果打印出圓周率近似值(保留小數點後
算法筆記_206:第五屆藍橋杯軟件類決賽真題(Java語言A組)
理論 cnblogs 條件 font 9.png 生成 true 突變 幻方 目錄 1 海盜分金幣 2 六角幻方 3 格子放雞蛋 4 排列序數 5 冪一矩陣 6 供水設施 1 海盜分金幣 有5個海盜,相約進行一次帆船比賽。 比賽中天氣發生突變,他們被沖
第六屆藍橋杯省賽Java語言C組_移動距離
移動距離 X星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3... 當排滿一行時,從下一行相鄰的樓往反方向排號。 比如:當小區排號寬度為6時,開始情形如下: 1 2 3
第七屆藍橋杯省賽Java語言C組_小題答案
1:58497 2:171700 3:145 4:i + j+2 == k+1 || i + k+2 == j+1 || k + j+2 == i+1 5:s + " " + (char) (i
第七屆藍橋杯 湊算式 C語言 B組第三題
湊算式 B DEF A + --- + ------- = 10 C GHI (如果顯示有問題,可以參見【圖1.jpg】) 這個算式中A~I代表1~9的數字,不同的字母代表不同的數字。 比如: 6