From 4a74c7a3c0fb503457357df505255c51ec926753 Mon Sep 17 00:00:00 2001 From: zhangzc Date: Sat, 23 Oct 2021 13:38:14 +0800 Subject: [PATCH] add exercises --- .../10_World Cup Betting/desc.md" | 17 +++++- .../10_World Cup Betting/solution.cpp" | 29 +++++++++ .../desc.md" | 22 ++++--- .../3_Counting Leaves/desc.md" | 24 ++++---- .../3_Counting Leaves/solution.cpp" | 61 +++++-------------- .../4_Spell It Right/desc.md" | 4 +- .../5_Sign In and Sign Out/desc.md" | 8 +-- .../7_Elevator/desc.md" | 14 +++-- .../7_Elevator/solution.cpp" | 30 +++++++++ .../desc.md" | 22 +++++-- .../solution.cpp" | 46 ++++++++++++++ .../9_Radix/desc.md" | 23 +++++-- .../9_Radix/solution.cpp" | 39 ++++++++++++ 13 files changed, 251 insertions(+), 88 deletions(-) diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/desc.md" index d7c17c973..847866690 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/desc.md" @@ -1,8 +1,19 @@ ## 标题 - +找最值 ## 题目描述 +输入A、B、C三组数,每组三个数,选取每组中最大的数并输出所对应的字符(A\B\C),并输出每组中最大的数```a1, a2, a3``` +#### 输入格式: +输入三行三列,每列代表一组数,每组三个数 +#### 输出格式: +输出每组中最大的数以及组号,组号与最大的数之间用空格隔开,结果保留小数点后两位 #### 输入 - +``` +1.1 2.5 1.7 +1.2 3.1 1.6 +4.1 1.2 1.1 +``` #### 输出 - \ No newline at end of file +``` +B 2.50 B 3.10 A 4.10 +``` \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/solution.cpp" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/solution.cpp" index e69de29bb..bb6dbf462 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/solution.cpp" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/10_World Cup Betting/solution.cpp" @@ -0,0 +1,29 @@ +#include +#include +using namespace std; +int main() +{ + float n, max[3] = {-1}; + int pos[3]; + string s[3] = {"W", "T", "L"}; + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + cin >> n; + if (n > max[i]) + { + max[i] = n; + pos[i] = j; + } + } + } + float res; + res = (max[0] * max[1] * max[2] * 0.65 - 1) * 2; + for (int i = 0; i < 3; i++) + { + cout << s[pos[i]] << " "; + } + printf("%.2f", res); + return 0; +} diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/1_A+B for Polynomials \345\244\232\351\241\271\345\274\217\347\233\270\345\212\240/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/1_A+B for Polynomials \345\244\232\351\241\271\345\274\217\347\233\270\345\212\240/desc.md" index 08326f19c..99ef7d1ed 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/1_A+B for Polynomials \345\244\232\351\241\271\345\274\217\347\233\270\345\212\240/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/1_A+B for Polynomials \345\244\232\351\241\271\345\274\217\347\233\270\345\212\240/desc.md" @@ -1,21 +1,25 @@ ## 标题 多项式相加 ## 题目描述 -给定两个多项式的信息,让我们求两个多项式相加的结果。每一个多项式输入一行,第一个数字是多项式的项数 后面每两个数据一组为一个项,分别是指数和系数。 输入的数据按照**指数递减**的顺序。 +多项式A: $2.1*x^3 + 1.0*x^2$ +多项式B: $0.0*x^3 + 0.1*x^2$ +将两式相加得到 $2.1*x^3 + 1.1*x^2$ #### 输入 ``` 2 3 2.1 2 1.0 2 3 0.0 2 0.1 ``` #### 输入解释 -``` -第一行第一个数字 2 ,表示两项:3*2.1 + 2*1.0 -第一行第一个数字 2 ,表示两项:3*0.0 + 2*0.1 -``` +$$ +第一行第一个数字 2 ,表示两项:2.1*x^3 + 1.0*x^2 +$$ +$$ +第二行第一个数字 2 ,表示两项:0.0*x^3 + 0.1*x^2 +$$ #### 输出 +``` 2 3 2.1 2 1.1 -#### 输出解释 ``` -第一行第一个数字 2 ,表示两项:3*(2.1 + 0.0) + 2*(1.0 + 0.1) -合并后:3*2.1 + 2*1.1 -``` \ No newline at end of file +#### 输出解释 +上面两项相加的结果: +$$第一个数字 2 ,表示两项:2.1*x^3 + 1.1*x^2$$ \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/desc.md" index 032533814..861d3293e 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/desc.md" @@ -1,23 +1,21 @@ ## 标题 -求每一层叶子节点的个数 +DFS简单运用 ## 题目描述 -输入一个值表示树中节点总数,另一个数表示非叶节点总数,接下来就是输入树的层次结构。要求判断出每一层有多少个叶节点并且输出 +给定整数$a_1,a_2.....a_n$,判断是否可以从中选出若干数,使他们的和恰好为k。 #### 输入 ``` -2 1 -01 1 02 +4 +1 2 4 7 +13 ``` #### 输入解释 -每个输入文件包含一个测试用例。每一种情况都以包含0 < N < 100(树中的节点数)和M (< N)(非叶节点数)的行开始。接下来是M行,每一行的格式如下: -``` -ID K ID[1] ID[2] ... ID[K] -``` -其中ID是一个两位数,表示给定的非叶节点,K是它的子节点的编号,后面是它的子节点的两位数ID序列。为了简单起见,让我们将根ID修改为01。 - +第一行输入n,表示总共n个数 +第二行输入每个数 +第三行输入k #### 输出 ``` -0 1 +Yes ``` #### 输出解释 -对于每个测试用例,您都应该从根开始计算没有孩子的家庭成员。数字必须在一行中打印,用空格隔开,并且在每行的末尾不能有额外的空格。 -示例示例表示一棵只有2个节点的树,其中01是根节点,02是唯一的子节点。因此在根01层上,有0个叶节点;下一层,有1个叶节点。然后我们应该在一行中输出“0 1”。 \ No newline at end of file +若存在,则输出Yes +反之,输出No \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/solution.cpp" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/solution.cpp" index 5b2ec2ec8..4420c93ff 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/solution.cpp" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/3_Counting Leaves/solution.cpp" @@ -1,47 +1,18 @@ - -#include -using namespace std; -typedef long long ll; - -int e[300], h[300], nex[300]; -int idx; -int cnt[300], mx_dep; -void add(int u, int v) -{ - e[idx] = v, nex[idx] = h[u], h[u] = idx++; -} -void dfs(int u, int dep) -{ - if (h[u] == -1) //叶子结点 - { - cnt[dep]++; - mx_dep = max(mx_dep, dep); - return; - } - for (int i = h[u]; ~i; i = nex[i]) - dfs(e[i], dep + 1); -} - -int main() +#define MAX_N 1005 +int data[MAX_N]; +int n, k; +// 从前i项得到的和sum +bool DFS(int i, int sum) { - int n, m; - cin >> n >> m; - memset(h, -1, sizeof h); - for (int i = 0; i < m; i++) - { - int id, k; - cin >> id >> k; - while (k--) - { - int b; - cin >> b; - add(id, b); - } - } - dfs(1, 0); - cout << cnt[0]; - for (int i = 1; i <= mx_dep; i++) - cout << ' ' << cnt[i]; + // n项都计算过了,判断是否等于k + if (i == n) + return sum == k; + // 不加上第i项 + if (DFS(i + 1, sum)) + return true; + // 加上第i项 + if (DFS(i + 1, sum + data[i])) + return true; - return 0; -} + return false; +} \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/4_Spell It Right/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/4_Spell It Right/desc.md" index 8c55590ba..2e4269bc1 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/4_Spell It Right/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/4_Spell It Right/desc.md" @@ -4,9 +4,9 @@ 给一个 100 位以内的数,计算所有数字之和,并将结果的每一位用英文表示。 #### 输入 ``` -12345 +666 ``` #### 输出 ``` -one five +one eight ``` \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/5_Sign In and Sign Out/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/5_Sign In and Sign Out/desc.md" index a9d857996..52759aca1 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/5_Sign In and Sign Out/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/5_Sign In and Sign Out/desc.md" @@ -5,11 +5,11 @@ #### 输入 ``` 3 -CS301111 15:30:28 17:00:10 -SC3021234 08:00:00 11:25:25 -CS301133 21:45:00 21:58:40 +zhangsan 09:00:28 17:30:10 +lisi 08:00:00 18:30:25 +wangmazi 12:00:00 22:58:40 ``` #### 输出 ``` -SC3021234 CS301133 +lisi wangmazi ``` \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/desc.md" index d7c17c973..ec8e87da9 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/desc.md" @@ -1,8 +1,14 @@ ## 标题 - +坐电梯 ## 题目描述 - +电梯从0层开始,按照指定的顺序,依次停到各个楼层 +每个楼层停5s,上升一层需要6s,下降一层需要4s +求总时间 #### 输入 - +``` +1 4 3 1 +``` #### 输出 - \ No newline at end of file +``` +29 +``` \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/solution.cpp" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/solution.cpp" index e69de29bb..a2eab2c4a 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/solution.cpp" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/7_Elevator/solution.cpp" @@ -0,0 +1,30 @@ +#include +using namespace std; + +// 1008 Elevator (20)(20 point(s)) +int main(void) +{ + int n; + cin >> n; + + int sum = 0, old = 0, t; + for (int i = 0; i < n; ++i) + { + cin >> t; + + if (t - old > 0) + { // up + sum += (t - old) * 6; + } + else + { + sum += (old - t) * 4; + } + sum += 5; + old = t; + } + + cout << sum << endl; + + return 0; +} // jinzheng 2018.7.24 11:03 \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/desc.md" index d7c17c973..33232f7d1 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/desc.md" @@ -1,8 +1,22 @@ ## 标题 - +多项式乘法 ## 题目描述 - +求多项式A与多项式B相乘的结果 +多项式A: $2.4*x^1 + 3.2*x^0$ +多项式B: $1.5*x^2 + 0.5*x^1$ +求A*B #### 输入 - +``` +2 1 2.4 0 3.2 +2 2 1.5 1 0.5 +``` +#### 输入解释 +$$第一行的第一个数2,表示两项:2.4*x^1 + 3.2*x^0$$ +$$第二行的第一个数2,表示两项:1.5*x^2 + 0.5*x^1$$ #### 输出 - \ No newline at end of file +``` +3 3 3.6 2 6.0 1 1.6 +``` +#### 输出解释 +上面两项相乘的结果: +$$第一行的第一个数3,表示三项:3.6*x^3 + 6.0*x^2 + 1.6*x^1$$ diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/solution.cpp" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/solution.cpp" index e69de29bb..3f71b6656 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/solution.cpp" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/8_Product of Polynomials \345\244\232\351\241\271\345\274\217\344\271\230\346\263\225/solution.cpp" @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +using namespace std; +double con[2][1001] = {0.0}; +double ans[2002] = {0.0}; +vector exist; +int main() +{ + int K, tmp1, mk; + double tmp2; + for (int i = 0; i < 2; i++) + { + scanf("%d", &K); + if (i == 1) + mk = exist.size() - 1; + for (int j = 0; j < K; j++) + { + scanf("%d", &tmp1); + scanf("%lf", &tmp2); + con[i][tmp1] = tmp2; + exist.push_back(tmp1); + } + } + int cnt = 0; + int sze = exist.size(); + for (int i = 0; i <= mk; i++) + { + for (int j = mk + 1; j < sze; j++) + ans[exist[i] + exist[j]] += con[0][exist[i]] * con[1][exist[j]]; + } + for (int k = 2000; k >= 0; k--) + { + if (ans[k] != 0) + cnt++; + } + printf("%d", cnt); + for (int k = 2000; k >= 0; k--) + { + if (ans[k] != 0) + printf(" %d %.1f", k, ans[k]); + } + return 0; +} diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/desc.md" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/desc.md" index d7c17c973..a5501ffea 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/desc.md" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/desc.md" @@ -1,8 +1,23 @@ ## 标题 - +二分查找 ## 题目描述 +利用二分查找法判断元素是否存在于有序数组中 +给定有序数组``` int a[] = {1, 2, 3, 3, 5, 6}```; -#### 输入 - -#### 输出 +#### 输入样例1: +``` +3 +``` +#### 输出样例1: +``` +1 +``` +#### 输入样例2: +``` +7 +``` +#### 输出样例2: +``` +-1 +``` \ No newline at end of file diff --git "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/solution.cpp" "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/solution.cpp" index e69de29bb..8e86b3a3e 100644 --- "a/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/solution.cpp" +++ "b/data/2.\347\256\227\346\263\225\344\270\255\351\230\266/1.pat\347\224\262\347\272\247/9_Radix/solution.cpp" @@ -0,0 +1,39 @@ +#include +#include +#include +using namespace std; + +int find_binary(int target, vector &arr) +{ + if (arr.empty()) + return -1; + int low = 0; + int high = arr.size() - 1; + + while (low <= high) + { + int middle = (low + high) / 2; + if (target == arr[middle]) + return 1; + else if (target > arr[middle]) + low = middle + 1; + + else + high = middle - 1; + } + return -1; +} + +int main() +{ + int b; + int a[] = {1, 2, 3, 3, 5, 6}; + int len = sizeof(a) / sizeof(int); + vector arr(a, a + len); + std::sort(arr.begin(), arr.end()); + vector::iterator it; + scanf("%d", &b); + cout << find_binary(b, arr) << endl; + + return 0; +} -- GitLab