1. 卖树苗
植树节又到了,商家A和商家B为了卖出更多的树苗。
商家A有了新的决定:
购买树苗数量小于等于10棵,所有树苗按正常价格10元一棵收费;
购买树苗数量大于10且小于等于20棵,超出10棵以上的树苗按8.2元一棵收费,其余树苗按正常价格收费;
购买树苗数量大于20棵,超出20棵以上的树苗按7.5元一棵收费,10至20棵部分树苗按8.2元一棵收费,其余树苗按正常价格收费。
商家B决定:
所有树苗12元一棵,但是均打七折卖出。
图图要代表班级去买树苗,要求输入图图需要购买的树苗棵数,输出在哪家商家购买更加划算及其所要花费的钱数。
输入要求
1 行,一个整数,表示图图需要购买的树苗数量。
输出要求
1 行,如果商家A的树苗比较划算,输出:A,否则输出:B,同时输出图图购买树苗最优惠的钱数(文字和数字间用空格隔开)。
样例输入
30
样例输出
B 252
以下程序实现了这一功能,请你填补空白处内容:
```c++
#include <iostream> using namespace std; int main() { double n, A, B; cin >> n; B = 12 * 0.7 * n; if (n <= 10) { A = 10 * n; } else if (n > 10 && n <= 20) { A = 10 * 10 + (n - 10) * 8.2; } ___________________________; if (A < B) { cout << "A " << A; } else { cout << "B " << B; } return 0; }
出处:
https://edu.csdn.net/practice/26945793
代码:
#include <iostream> using namespace std; int main() { double n, A, B; cin >> n; B = 12 * 0.7 * n; if (n <= 10) { A = 10 * n; } else if (n > 10 && n <= 20) { A = 10 * 10 + (n - 10) * 8.2; } else { A = 10 * 8.2 + (n - 20) * 7.5 + 10 * 10; } if (A < B) { cout << "A " << A; } else { cout << "B " << B; } return 0; }
输出:
略
2. 数字归类
题目描述
一个数里面若含有数字1,则归类到1字类,含有数字2,则归类到2字类,所以一个数可能同时归类到不同的数字类。对于0、1、2、3、4、5、6、7、8、9这十个数字类,因研究需要,急于想知道某一堆数中,究竟归类到这些数字类的个数。
样例输入
123 456 175 2 61 9998 12 5053 382
样例输出
1. 0: 1 2. 1: 4 3. 2: 4 4. 3: 3 5. 4: 1 6. 5: 3 7. 6: 2 8. 7: 1 9. 8: 2 10. 9: 1
提示
注意:输出结果中冒号后面有空格
以下程序实现了这一功能,请你填补空白处内容:
···c++ #include <stdio.h> #include <string.h> int result[10]; int main(void) { memset(result, 0, sizeof(int) * 10); int n; int arr[10]; while (scanf("%d", &n) != EOF) { memset(arr, 0, sizeof(int) * 10); if (n == 0) arr[0] = 1; while (n > 0) { ____________; } for (int i = 0; i < 10; i++) result[i] += arr[i]; } for (int i = 0; i < 10; i++) printf("%d: %d\n", i, result[i]); return 0; } ```
出处:
https://edu.csdn.net/practice/26945794
代码:
#include <stdio.h> #include <string.h> int result[10]; int main(void) { memset(result, 0, sizeof(int) * 10); int n; int arr[10]; while (scanf("%d", &n) != EOF) { memset(arr, 0, sizeof(int) * 10); if (n == 0) arr[0] = 1; while (n > 0) { arr[n % 10] = 1; n = n / 10; } for (int i = 0; i < 10; i++) result[i] += arr[i]; } for (int i = 0; i < 10; i++) printf("%d: %d\n", i, result[i]); return 0; }
输入输出:
123
456
175
2
61
9998
12
5053
382
^Z //输入以上10个数后,Ctrl+Z回车
0: 1
1: 4
2: 4
3: 3
4: 1
5: 3
6: 2
7: 1
8: 2
9: 1
3. 组合总和 II
给定一个数组 candidates
和一个目标数 target
,找出 candidates
中所有可以使数字和为 target
的组合。
candidates
中的每个数字在每个组合中只能使用一次。
说明:
所有数字(包括目标数)都是正整数。
解集不能包含重复的组合。
示例 1:
输入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]
示例 2:
输入: candidates = [2,5,2,1,2], target = 5,
所求解集为:[[1,2,2],[5]]
以下程序实现了这一功能,请你填补空白处内容:
usingnamespacestd; classSolution{ public: vector<vector<int>>combinationSum2(vector<int>&candidates, inttarget) { vector<vector<int>>res; sort(candidates.begin(), candidates.end()); dfs(candidates, 0, target, res); returnres; } private: vector<int>stack; voiddfs(vector<int>&candidates, intstart, inttarget, vector<vector<int>>&res) { if (target<0) { return; } elseif (target==0) { res.push_back(stack); } else { intlast=INT_MIN; for (inti=start; i<candidates.size(); i++) { if (last!=candidates[i]) { stack.push_back(candidates[i]); _________________________________; stack.pop_back(); } last=candidates[i]; } } } }; ```
出处:
https://edu.csdn.net/practice/26945795
代码:
usingnamespacestd; classSolution{ public: vector<vector<int>>combinationSum2(vector<int>&candidates, inttarget) { vector<vector<int>>res; sort(candidates.begin(), candidates.end()); dfs(candidates, 0, target, res); returnres; } private: vector<int>stack; voiddfs(vector<int>&candidates, intstart, inttarget, vector<vector<int>>&res) { if (target<0) { return; } elseif (target==0) { res.push_back(stack); } else { intlast=INT_MIN; for (inti=start; i<candidates.size(); i++) { if (last!=candidates[i]) { stack.push_back(candidates[i]); dfs(candidates, i+1, target-candidates[i], res); stack.pop_back(); } last=candidates[i]; } } } }; stringVector2dToString(vector<vector<int>>vec2d, stringsep=", ") { stringstreamss; ss<<"["; for (inti=0; i<vec2d.size(); ++i) { ss<<"["; copy(vec2d[i].begin(), vec2d[i].end(), ostream_iterator<int>(ss, sep.c_str())); ss.seekp(-(int)sep.size(), ios_base::end); ss<<"]"<<sep; } ss.seekp(-(int)sep.size(), ios_base::end); ss<<"]"; returnss.str(); } intmain() { Solutions; vector<int>candidates= {10,1,2,7,6,1,5}; cout<<Vector2dToString(s.combinationSum2(candidates, 8)) <<endl; candidates= {2,5,2,1,2}; cout<<Vector2dToString(s.combinationSum2(candidates, 5)) <<endl; return0; }
输出:
[[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]]
[[1, 2, 2], [5]]