期末复习(程序设计)

  1. 根据字符出现频率排序

【问题描述】

给定一个字符串 s ,根据字符出现的 频率 对其进行降序排序。一个字符出现的频率是它出现在字符串中的次数。

返回已排序的字符串。

频率相同的的字符按ascii值降序排序。

s不包含空格、制表符、换行符等特殊字符。

【输入格式】

输入一个字符串

【输入样例】

复制代码
tree

【输出样例】

复制代码
eetr

【样例说明】

e'出现两次,'r'和't'均只出现一次。

因此'e'必须出现在'r'和't'之前。'r'和 't' 同频次,则按ascii降序须将't'排前面,结果为eetr

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

string frequencySort(string s) {
    map<char, int> freq;
    for (char c : s) {
        freq[c]++;
    }

    sort(s.begin(),s.end(),[&](char a,char b)
{return freq[a]>freq[b]||(freq[a]==freq[b]&&a>b);});

    return s;
}

int main() {
    string s;
    cin >> s;

    string sortedString = frequencySort(s);
    cout << sortedString << endl;

    return 0;
}

[&](char a, char b) { ... } 是一个 lambda 表达式,用于定义一个匿名函数,也称为闭包。在这个上下文中,[&] 是捕获列表,表示捕获外部所有变量的引用。

具体解释一下:

  • [&]:捕获列表,这里的 & 表示以引用的方式捕获外部变量。所有外部变量在 lambda 函数中都可以被引用,而不是复制它们的值。这样做可以让 lambda 函数访问外部的变量,比如在这里我们使用了 freq
  • (char a, char b):lambda 函数的参数列表,这里定义了两个参数 ab,它们将在 lambda 函数中被使用。
  • { ... }:lambda 函数的函数体,其中包含实际的函数逻辑。

2.胡润富豪榜首富

【问题描述】

胡润百富是追踪记录中国企业家群体变化的权威机构,是由出生于欧洲卢森堡的英国注册会计师胡润先生于1999年创立的。现在,一年一度的胡润中国富翁榜是现在国内财经榜单里影响最大的一个榜单。请根据一组胡润富豪榜上的数据挑选出首富。

【输入形式】

有多行。第一行包含一个整数N (1 < N ≤ 20),表示有N位候选人,要从中选出排名第一的富豪,接下来N行分别是N位候选人的名字和财产(整数,单位:亿元)。(名字是由不超过20个字母组成的字符串,不含空格,任意两个人的财产都不一样)。

【输出形式】输出排名第一的富豪的名字和财产。

【样例输入】

复制代码
5
MaYun 2750
MaHuaTeng 2600
XuJiaYing 2100
HuangZheng 1350
DingLei 1250

【样例输出】MaYun 2750

【样例说明】财产排名第一的为MaYun,所以输出其名字和财产。

【提示】可使用标准库中的sort函数

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

struct RichPerson {
    string name;
    int wealth;

};
int main() {
    int n;
    cin >> n;
//    vector<RichPerson> candidates(n);
    RichPerson candidates[n];
    for (int i = 0; i < n; ++i) {
        cin >> candidates[i].name >> candidates[i].wealth;
    }

    sort(candidates, candidates+n,[&](RichPerson a,RichPerson b)
    {return a.wealth>b.wealth;});

    cout << candidates[0].name << " " << candidates[0].wealth << endl;

    return 0;
}

或者使用

复制代码
vector<RichPerson> candidates(n);注意 n 两侧是小括号
来创建对应容器,但注意此时 sort 内要改为
cpp 复制代码
candidates.begin(), candidates.end()

而不是之前RichPerson candidates[n];注意 n 两侧是中括号

对应的

cpp 复制代码
candidates, candidates+n
相关推荐
乌萨奇也要立志学C++6 小时前
【洛谷】递归初阶 三道经典递归算法题(汉诺塔 / 占卜 DIY/FBI 树)详解
数据结构·c++·算法
鱼跃鹰飞7 小时前
Leetcode1891:割绳子
数据结构·算法
无限进步_9 小时前
【C语言&数据结构】对称二叉树:镜像世界的递归探索
c语言·开发语言·数据结构·c++·git·算法·visual studio
玖剹10 小时前
队列+宽搜(bfs)
数据结构·c++·算法·leetcode·宽度优先
C++ 老炮儿的技术栈11 小时前
什么是通信规约
开发语言·数据结构·c++·windows·算法·安全·链表
萧瑟其中~12 小时前
二分算法模版——基础二分查找,左边界查找与右边界查找(Leetcode的二分查找、在排序数组中查找元素的第一个位置和最后一个位置)
数据结构·算法·leetcode
码农小韩12 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
想做后端的小C13 小时前
408 数据结构:数据结构三要素——逻辑结构、物理(存储)结构和运算操作
数据结构
栈与堆13 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust