栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

每日两题cpp

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日两题cpp

每日两题cpp
    • 组队竞赛(贪心)
    • 删除公共字符(哈希)
    • 排序子序列(数组)
    • 倒置字符串(字符串)

组队竞赛(贪心)

解题思路

本题的主要思路是贪心算法,贪心算法其实很简单,就是每次选值时都选当前能看到的局部最解忧,所
以这里的贪心就是保证每组的第二个 是次大的 ;
先排好序,每次使用最左边的和最右边的两个进行组队,可以保证每队中间位置局部最大,对其加和;

#include
#include
#include
using namespace std;

int main()
{
    vectorarr;
    int n,tmp;
    while(cin>>n)
    {
        while(cin>>tmp)
        {
            arr.push_back(tmp);
        }
        //录入完成;
       
        sort(arr.begin(),arr.end());
        long long ret = 0;
        for(int i = n;i
            ret+=arr[i];
        }
        cout< 
删除公共字符(哈希) 

解题思路

搞个哈希表,存入要删的字符,遍历原字符串,用哈希表过滤的不需要的即可;

#include
#include
#include
#include
#include
#include
using namespace std;

int main()
{
    string s1,s2;
    unordered_setst;
    // 注意这里不能使用cin接收,因为cin遇到空格就结束了。
    // oj中IO输入字符串最好使用getline。
    getline(cin,s1);
    getline(cin,s2);

    for(int i = 0;i
        st.insert(s2[i]);
    }
    for(int i = 0;i
        if(st.find(s1[i])==st.end()) cout< 
排序子序列(数组) 

解题思路

flag作为标志转换器1为递增序列,-1为递减序列,每次变换完恢复0(待设置状态),循环统计转折次数;

#include
using namespace std;

int main()
{
    int n;
    cin >> n;
    int arr[n];
    //当第一次出现子序列转折时,其实已经"一刀两断",划分成两个子序列了
    int cnt = 1;
    int flag = 0;
    
    if (n <= 2) return 1;

    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    for (int i = 0; i < n; i++)
    {
        if (i + 1 < n && arr[i] < arr[i + 1])
        {
        	//flag待设置,根据递增还是递减设置flag;
            if (flag == 0) flag = 1;
			//flag-1递减状态,序列出现递增,划分,cnt++flag恢复初始待设置状态
            if (flag == -1)
            {
                flag = 0;
                cnt++;
            }
        }
        else if (i + 1 < n && arr[i] > arr[i + 1])
        {
            if (flag == 0) flag = -1;

            if (flag == 1)
            {
                cnt++;
                flag = 0;
            }
        }
        //else 这里就是arr[i] > arr[i + 1],不处理只需要让i++ for里面处理了;
    }
    cout << cnt << endl;
    return 0;
}
倒置字符串(字符串)


解题思路

1.先反转每个单词;
2.再反转整体字符串则可以达到目的;(善于观察)

#include
#include
#include
using namespace std;

int main()
{
    string str;
    vectorarr;
    getline(cin,str);
    int len = str.size();
    //先反转每个单词
    int l = 0;
    int r = 1;
    while(l
        while(r
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/942272.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号