洛谷訓練新手村之「過程函式與遞迴」題解

2022-05-19 23:53:21 字數 1667 閱讀 4541

題目大意:以遞迴的方式輸出題目描述中的資料方案數。

解題思路:

因為是方案數,所以只需要開乙個計數器統計一下總共有多少方案即可。我們令f(n)返回數為 n 的時候的方案數,不難得出: \(f(n) = 1 + \sum_^2 \rfloor } f(i)\) 。

但是需要注意乙個細節,我們需要用到備忘錄(或者稱為 記憶化搜尋 )的思想,即,如果我已經統計過了 \(f(n)\) ,那麼我就在統計的同時將結果記錄到乙個輸出 \(cnt[n]\) 中,下次我直接返回 \(cnt[n]\) 即可。

實現**如下:

#include using namespace std;

int a, cnt[1001];

int f(int num)

int main()

題目大意:找出n個數中選k個數,並且這k個數的和是素數的方案數。

解題思路:深度優先搜尋遍歷一下即可。

實現**如下:

#include using namespace std;

bool isp(int a)

int n, k, a[22], cnt;

void dfs(int id, int m, int sum)

if (id > n) return;

dfs(id+1, m, sum);

dfs(id+1, m+1, sum+a[id]);

}int main()

題目大意:給你 n 根火柴,問拿這 n 根火柴能夠拼出多少個不同的等式。

解題思路:開乙個陣列存放每個數對應的火柴棒數量,然後列舉每乙個加數和被加數,看看是不是等式剛好使用了 n 根火柴棒(我自己測了一下加數和被加數最大是712,所以我就列舉到了712)。

實現**如下:

#include using namespace std;

int refn[10] = ;

int get_num(int num)

return ans;

}int n, ans = 0;

int main() }}

cout << ans << endl;

return 0;

}

題目大意:找到區間 \([a,b]\) 範圍內的所有會問質數。

解題思路:

首先考慮列舉區間 \([a,b]\) 內的每乙個數,判斷是否是回文,是否是質數,但是這樣超時了。

然後考慮優化,只判斷奇數,結果還是超時。

然後考慮有陣列存數的每一位(最高 8 位數)以此直接列舉所有的回文數,然後判斷是不是素數並且在 \([a,b]\) 範圍內。

實現**如下:

#include using namespace std;

int t[10], a, b;

int pow10(int a)

int get_num(int pre, int len)

return pre * a + b % a;

}bool isp(int a)

int main()

}return 0;

}

洛谷訓練新手村之「陣列」題解

題目大意 求有多少蘋果樹的高度 le 陶陶的高度 30。解題思路 開陣列存資料,然後迴圈遍歷一遍。實現 如下 include using namespace std int a 11 cnt int main 題目大意 給你若干區間,求有多少點沒有被這些區間覆蓋。解題思路 開乙個 cut 陣列,cu...

洛谷訓練新手村之「順序與分支」題解

題目大意 夏天到了,各家各戶的用電量都增加了許多,相應的電費也交的更多了。小玉家今天收到了乙份電費通知單。小玉看到上面寫 據閩價電 2006 27號規定,月用電量在150千瓦時及以下部分按每千瓦時0.4463元執行,月用電量在151 400千瓦時的部分按每千瓦時0.4663元執行,月用電量在401千...

洛谷新手村的收穫

以下按題目順序排列 for迴圈也可以用在實數中,之前一直以為只能給陣列用 include intmain printf d d return0 判斷相等時用兩個等號在查錯時可用printf 輸出並用getchar 隔斷在判斷多位數每個數字是否與題設相等時,可用 與 將每位取出,存位,賦值再討論 in...