問題描述
100 可以表示為帶分數的形式:100 = 3 + 69258 / 714。
還可以表示為:100 = 82 + 3546 / 197。
注意特徵:帶分數中,數字1~9分別出現且只出現一次(不包含0)。
類似這樣的帶分數,100 有 11 種表示法。
輸入格式
從標準輸入讀入乙個正整數n (n<1000*1000)
輸出格式
程式輸出該數字用數碼1~9不重複不遺漏地組成帶分數表示的全部種數。
注意:不要求輸出每個表示,只統計有多少表示法!
樣例輸入1
100樣例輸出1
11樣例輸入2
105樣例輸出2
6剛開始看這道題覺得有點麻煩,想的是把1-9分成3部分,然後每次字典序排序,非常麻煩,後來看了網上的題解,覺得用dfs更容易去做。
首先取整數部分,然後取分母部分,輸入與整數的差乘以分母則為分子,只要滿足分子為取過整數和分母之後剩下的數字組成的要求,即為一種表示法。
整數部分取到n-2即可。n-1時,分子與分母要相等,不可能,捨棄。n時,分子為0,不可能,捨棄。
**如下:
[html]view plain
copy
#include
<
cstdio
>
#include<
cstring
>
int flag1[10],flag2[10];
int ls,v,num=0
; int check(int n) //檢查該數字組成中是否有重複的數字,若沒有,將出現過的數字做標記,並返回1,否則返回0;
ls=9
-ls; //儲存未被標記的數字的個數
return 1;
} int judge(int n) //check功能相同,檢查是否有重複,並返回該數字長度
return len;
} void dfs(int len,int x) //x作為分母 len作為分母的長度
if(len<
=ls/2)
for(int i=1
;i<
10;i++)
} } int main()
} printf("%d",num);
}
藍橋杯 帶分數
問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出格式 ...
藍橋杯 帶分數
問題描述 100 可以表示為帶分數的形式 100 3 69258 714。還可以表示為 100 82 3546 197。注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。輸入格式 從標準輸入讀入乙個正整數n n 1000 1000 輸出格式 ...
藍橋杯 帶分數
100 可以表示為帶分數的形式 100 3 69258 714 還可以表示為 100 82 3546 197 注意特徵 帶分數中,數字1 9分別出現且只出現一次 不包含0 類似這樣的帶分數,100 有 11 種表示法。題目要求 從標準輸入讀入乙個正整數n n 1000 1000 程式輸出該數字用數碼...