問題描述
將整數n分成k份,且每份不能為空,任意兩份不能相同(不考慮順序)。
例如:n=7,k=3,下面三種分法被認為是相同的。
1,1,5; 1,5,1; 5,1,1;
問有多少種不同的分法。
輸入格式
n,k輸出格式
乙個整數,即不同的分法
樣例輸入
7 3樣例輸出
4資料規模和約定6
分析:遞迴問題,step表示當前剩餘的數需要分成的份數~~
把n分成k份,只需第乙個數等於i,計算從i等於1一直到i等於n/k,然後把剩餘的n-i分成k-1份的種類數…
front為剩餘的要劃分的數的前乙個數,每次i從front開始一直到n/step結束,這樣才能保證得到的劃分方式是不遞減的,才能保證不會有重複的情況產生~
#include using namespace std;
int cnt = 0;
void dfs(int front, int n, int step)
for(int i = front; i <= n / step; i++)
dfs(i, n - i, step - 1);
}int main()
藍橋杯 ALGO 14 演算法訓練 回文數
問題描述 若乙個數 首位不為零 從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數。例如 給定乙個10進製數56,將56加65 即把56從右向左讀 得到121是乙個回文數。又如 對於10進製數87 step1 87 78 165 step2 165 561 726 step3 726 627 13...
藍橋杯 ALGO 119 演算法訓練 寂寞的數
問題描述 道德經曰 一生二,二生三,三生萬物。對於任意正整數n,我們定義d n 的值為為n加上組成n的各個數字的和。例如,d 23 23 2 3 28,d 1481 1481 1 4 8 1 1495。因此,給定了任意乙個n作為起點,你可以構造如下乙個遞增序列 n,d n d d n d d d n...
藍橋杯 演算法訓練 ALGO12
問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所有數都是不大於k的正整數 2.序列中至少有兩個數。3.序列中的數兩兩不相等 4.如果第i 1個數比第i 2個數大,則第i個數比第i 2個數小 如果第i 1個數比第i 2個數小,則第i個數比第i 2個數大。比如,當k 3時,有...