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 輸出格式 ...