C/C++每日一练(20230502) 卖树苗、数字归类、组合总和II

简介: C/C++每日一练(20230502) 卖树苗、数字归类、组合总和II

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]]


以下程序实现了这一功能,请你填补空白处内容:

#include <bits/stdc++.h>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

代码:

#include <bits/stdc++.h>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]]



目录
相关文章
|
4月前
|
Linux 监控 Shell
Linux 终端命令之文件浏览(4) head, tail
Linux 终端命令之文件浏览(4) head, tail
30 0
Linux 终端命令之文件浏览(4) head, tail
|
4月前
|
Shell Linux 机器学习/深度学习
Linux 终端操作命令(3)内部命令用法
Linux 终端操作命令(3)内部命令用法
49 0
Linux 终端操作命令(3)内部命令用法
|
4月前
|
Linux 监控 Ubuntu
Linux 终端操作命令(1)
Linux 终端操作命令(1)
66 1
Linux 终端操作命令(1)
|
4月前
|
Python Linux Ubuntu
Linux系统部署Python语言开发运行环境
Linux系统部署Python语言开发运行环境
95 0
Linux系统部署Python语言开发运行环境
|
4月前
|
Go Unix 开发者
Go语言time库,时间和日期相关的操作方法
Go语言time库,时间和日期相关的操作方法
54 0
Go语言time库,时间和日期相关的操作方法
|
4月前
|
C++ 存储 Serverless
力扣C++|一题多解之数学题专场(2)
力扣C++|一题多解之数学题专场(2)
28 0
力扣C++|一题多解之数学题专场(2)
|
4月前
|
Go 机器学习/深度学习 Rust
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
38 0
Golang每日一练(leetDay0119) 反转字符串I\II Reverse String
|
4月前
|
Java Go C++
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
35 0
Golang每日一练(leetDay0115) 重新安排行程、递增的三元子序列
|
4月前
|
Java Go C++
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
27 0
Golang每日一练(leetDay0111) 摆动排序II\I Wiggle Sort
|
4月前
|
Java Go Rust
Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数
Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数
24 0
Golang每日一练(leetDay0095) 第一个错误的版本、完全平方数