藍橋帶分數(全排列)

2021-07-25 15:29:44 字數 1525 閱讀 4859

100 可以表示為帶分數的形式:100 = 3 + 69258 / 714

還可以表示為:100 = 82 + 3546 / 197

注意特徵:帶分數中,數字1~9分別出現且只出現一次(不包含0)。

類似這樣的帶分數,100 有 11 種表示法。

題目要求:

從標準輸入讀入乙個正整數n (n<1000*1000)

程式輸出該數字用數碼1~9不重複不遺漏地組成帶分數表示的全部種數。

注意:不要求輸出每個表示,只統計有多少表示法!

例如:

使用者輸入:

100

程式輸出:

11再例如:

使用者輸入:

105

程式輸出:

6資源約定:

峰值記憶體消耗 < 64m

cpu消耗 < 3000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入…」 的多餘內容。

所有**放在同乙個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0

注意: 只使用ansi c/ansi c++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。

注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。

提交時,注意選擇所期望的編譯器型別。

先全排列再把這個等式分成三部分暴力判斷就可以了。

法1:(stl)

#include 

#include

#include

#include

using namespace std;

int n;

int a[9]=;

int num1,num2,num3;

int main()

printf("%d\n",n );

int len=s.length();

doif(num1>n) continue;

for(int k=i+1;k<8;k++)

for(int l=k+1;l<9;l++)

printf("%d

%d%d\n",num1,num2,num3);

if(num2%num3==0&&n==(num1+num2/num3))}}

}while(next_permutation(a,a+9));

printf("%d\n",ans );

}

法二:(遞迴)

#include

using

namespace

std;

int a[10], ans, n;

bool book[10];

void dfs(int cur)

return ;

}for(int i = 1; i <= 9; i++)

}}int main(void)

return

0;}

藍橋杯 帶分數 全排列

題目 問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出...

帶分數 全排列

100 可以表示為帶分數的形式 100 3 69258714 還可以表示為 100 82 3546197 類似這樣的帶分數,100 有 11 種表示法。輸入格式 乙個正整數。輸出格式 輸出輸入數字用數碼 1 9 不重複不遺漏地組成帶分數表示的全部種數。資料範圍 1 n 106 輸入樣例1 100輸出...

藍橋杯 帶分數(搜尋 全排列)

問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出格式 ...