形如:1/a 的分數稱為單位分數。
可以把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
請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。
所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。
注意: main函式需要返回0
注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。
只想到了暴力搜尋的方法**如下效率還不是很好歡迎交流
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
int n;
int count=0;
int counts=0;
double table[31][30];//表示從第n個數到之後連續m個數的和
void coutvector(vectord)
double sum=getvectorsum(d);//獲得當前佇列最大值
if((sum-(1.0/30.0))>1 )
if(d.size()==n)
if(d.size()>0) }
int k=2;
if(d.size()!=0)
k=d[d.size()-1]+1;
for(int i=k;i<=30;i++)
}int main()
cin>>n;
vector i;
dsf(i);
cout<<"總共計算了"<
第六屆藍橋杯校內選拔賽C C 高職組解題(2)
1 1 1 2 1 3 1 4 在數學上稱為調和級數。它是發散的,也就是說,只要加上足夠多的項,就可以得到任意大的數字。但是,它發散的很慢 前1項和達到 1.0 前4項和才超過 2.0 前83項的和才超過 5.0 那麼,請你計算一下,要加多少項,才能使得和達到或超過 15.0 呢?請填寫這個整數。注...
第六屆藍橋杯校內選拔賽C C 高職組解題(4)
1193是個素數,對它迴圈移位後發現 1931,9311,3119也都是素數,這樣特徵的數叫 迴圈素數。你能找出具有這樣特徵的5位數的迴圈素數嗎?當然,這樣的數字可能有很多,請寫出其中最大的乙個。注意 答案是個5位數,不要填寫任何多餘的內容。答案99371 include include inclu...
第六屆藍橋杯校內選拔賽C C 高職組解題(7)
你一定聽說過 數獨 遊戲。如 圖1.png 玩家需要根據9 9盤面上的已知數字,推理出所有剩餘空格的數字,並滿足每一行 每一列 每乙個同色九宮內的數字均含1 9,不重複。數獨的答案都是唯一的,所以,多個解也稱為無解。本圖的數字據說是芬蘭數學家花了3個月的時間設計出來的較難的題目。但對會使用計算機程式...