笔试强训——第一周

基于 STM32 设计的 HC05 蓝牙音箱 本项目介绍如何使用 STM32 微控制器和 HC05 蓝牙模块设计一个简单的蓝牙音箱。该音箱可以接收来自手机或其他蓝牙设备的音频数据,并通过扬声器播放。该项目展示了如何使用 STM32 微控制器和 HC05 蓝牙模块设计一个简单的蓝牙音箱。易于实现功能实用可扩展性强如果您需要开发一个蓝牙音箱,该项目可以作为参考。 阅读详情

25_7_7

第二题:两个数组的交集_牛客题霸_牛客网

本题采用哈希,因为哈希查找速度极快

当数据个数上限不大时,可以不用定义真正的哈希表,自己用数组模拟一个哈希表,提高效率

自己做题时开辟了真正的哈希表,更优算法如下:

class Solution

{

public:



    vector<int> intersection(vector<int>& nums1, vector<int>& nums2)

    {

        vector<int> ans;

        vector<bool> hash(1000, false);

        for(auto i : nums1)

        {

            hash[i] = true;

        }

        for(int i = 0; i < nums2.size(); i++)

        {

            if(hash[nums2[i]] == true)

            {

                ans.push_back(nums2[i]);

                hash[nums2[i]] = false;

            }

        }

        return ans;

    }

};

第三题:点击消除_牛客题霸_牛客网 

利用栈的思想,类似于之前括号匹配那一题

我开始写的时候的思路:遍历字符串,和后面一样就string::erase删除迭代器区间,和前面一样也是;但是这样i可能在一次删除之后指向无效的位置

正确解法:

这里的ans最后的元素总是和str下一个元素相比较,所以要将进栈的操作放在比较的后面

#include <iostream>
#include<stack>
using namespace std;

int main() 
{
    string str, ans;
    cin >> str; 
    for(auto ch : str)
    {
        if(str.size() && ans.back() == ch) ans.pop_back();
        else ans.push_back(ch);
    }
    if(ans.size() == 0 ) cout<< "0";
    else cout << ans;    
    return 0;
}

25_7_8

第一题:牛牛的快递_牛客题霸_牛客网

我自己写的:利用sum反求整数部分

题解中有两种方法取得整数

1、ceil函数向上取整

2、num-(int)num,取得这个数的小数部分

#include <iostream>
using namespace std;

int main() 
{
    float a = 0.0;
    char b;
    cin >> a >> b;
    int sum = 0;
    if(a <= 1.0) sum += 20;
    else 
    {
        sum += 20 + (a - 1) / 1;
        float c = a - 1 - (sum - 20) / 1;
        if(c) sum += 1;  
    }
    if(b == 'y') sum += 5;
    cout << sum;
    return 0;
}
//1、ceil(a)
//2、c - (int)c

第二题:最小花费爬楼梯_牛客题霸_牛客网

使用动态规划

每一次处于一个台阶时,是从前面一个或者两个位置的台阶跳上来的;那么dp数组为跳到这个台阶之前总的花费,cost数组为跳离当前台阶的花费;那么:

dp[i] = min(dp[i-1] + cost[i-1] , dp[i-2] + cost[i-2])(状态转移方程)

由左向右填写方程,初始时,dp[0] = 0,dp[1] = 0,最后要算到dp[n]

#include <iostream>
#include<vector>
using namespace std;

int main() 
{
    int n = 0;
    cin >> n;
    vector<int> cost(n);
    for(int i = 0; i < n; i++)
        cin >> cost[i];
    
    vector<int> dp(n+1);
    dp[0]=0; dp[1]=0;//初始状态
    for(int i = 2; i <= n; i++)
    {
        dp[i] = min(dp[i-1] + cost[i-1] ,dp[i-2] + cost[i-2]);
    }
    if(n == 1)
        cout << cost[0];
    else
        cout << dp[n];
    return 0;
}

第三题:数组中两个字符串的最小距离

我的思路:

int main() {
    int n = 0;
    string str1;
    string str2;
    cin >> n;
    cin >> str1 >> str2;
    vector<string> strs(n);
    for (int i = 0; i < n; i++)
        cin >> strs[i];

    int gap = INT_MAX, p1 = -1, p2 = -1;
    //p1指向str1的位置,p2指向str2的位置
    //先从头开始找,找到p1或者p2作为基点之后再往后找p1或者p2
    //若是基点为p1,而后面先找到的是str1,那么更新p1;若是先找到的是str2,计算gap
    //之后在前面的作为基点重复操作,因为p1和p2之间不可能存在str1或者str2了
    for (int i = 0; i < n; i++) {
        if (strcmp(str1.c_str(), strs[i].c_str()) == 0) p1 = i;
        else if (strcmp(str2.c_str(), strs[i].c_str()) == 0) p2 = i;

        if (p1 != -1 && p2 != -1)
            gap = abs(p1 - p2) < gap ? abs(p1 - p2) : gap;
    }
    cout << (gap == INT_MAX ? -1 : gap);
    return 0;
}

题解思路:

贪心算法:每次找到一个匹配字符串之后往前找另一个字符串即可,这样不会漏掉,因为后面的当指针遍历到它时,又会向前找

具体地定义两个指针p1,p2分别指向str1,str2;然后找字符串,每次p1或者p2向前找p2或者p1,计算gap,小就更新

int main()
{
    int n = 0;
    string str1, str2;
    cin >> n;
    cin >> str1 >> str2;
    vector<string> strs(n);
    for (int i = 0; i < n; i++)
        cin >> strs[i];
    int p1 = -1, p2 = -1, gap = INT_MAX;
    for (int i = 0; i < n; i++)
    {
        if (strs[i] == str1)
        {
            if (p2 != -1)
            {
                gap = min(i - p2, gap);
            }
            p1 = i;
        }
        else if (strs[i] == str2)
        {
            if (p1 != -1)
            {
                gap = min(i - p1, gap);
            }
            p2 = i;
        }
    }
    if (gap == INT_MAX) cout << -1;
    else cout << gap;
    return 0;
}

25_7_9

第一题:简写单词_牛客题霸_牛客网

我的代码:读取整个字符串,找到空格之后找下一个字母,并且转为大写

string中find接口:

string (1)
size_t find (const string& str, size_t pos = 0) const;
c-string (2)
size_t find (const char* s, size_t pos = 0) const;
buffer (3)
size_t find (const char* s, size_t pos, size_t n) const;

(n表示匹配查找的个数)

character (4)
size_t find (char c, size_t pos = 0) const;

 getline接口:(无视空格读取一行字符串)

istream& getline (istream& is, string& str);

使用:string str;getline(cin , str);

int main()
{
    string str;
    getline(cin, str);
    string ans;
    ans += str[0];
    size_t pos = str.find(' ');
    while(pos != string::npos)
    {
        ans += str[pos + 1];
        pos = str.find(' ', pos + 1);
    }
    for (auto& ch : ans)
    {
        if (ch >= 97 && ch <= 122)
            ch -= 32;
    }
    cout << ans;
}

题解思路:

就是用cin读取每次读取空格分开的一个单词,之后取得每个单词开头第一个字符,直到读取完毕

// int main() 
// {
//     string str;
//     while(cin >> str)//跳过空格
//     {
//         if(str[0] >= 97 && str[0] <= 122) cout << (char)(str[0] - 32);
//         else cout << str[0];
//     }
//     return 0;
// }

第二题:dd爱框框

我的思路:滑动窗口

//滑动窗口
//首先要找最小区间,用两个指针,一个指针p1固定,另一个p2遍历
//遍历过程中一旦两个指针内的数加起来>=20那么此时的区间就是固定p1处得出最小的
//因为p2向后走区间内加起来肯定>=20但是区间一直变大
//当有>=20的时候就移动固定的p1,找更小的区间
//当>=20且新区间小于旧区间长度时就记录l和r,
int main()
{
    int n = 0, x = 0;
    cin >> n >> x;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    int p1 = 0, p2 = 0;
    int size = n, sum = 0;
    int l = 0, r = 0;
    while (p2 <= n)
    {
        if (sum < x)
            sum += a[p2++];
        else
        {
            if (p2 - p1 < size)
            {
                l = p1;
                r = p2 - 1;
                size = p2 - p1;
            }
            sum -= a[p1++];
        }
    }
    cout << l + 1 << ' ' << r + 1;
    return 0;
}

第三题:除2!

反思:做这题时这题思路是对的,代码有一个问题,没有考虑数据范围,要使用long long;之后都用long long吧

#include <functional>
#include <iostream>
#include<queue>
#include<vector>
using namespace std;

typedef long long LL;
//每次取最大的偶数进行/2操作
//利用优先级队列,结束看priority_queue参数怎么传
struct Less
{
    bool operator()(const LL& x, const LL& y)
    {
        return x < y;
    }
};
int main()
{
    //准备部分
    LL n = 0, k = 0;
    cin >> n >> k;
    vector<LL> a(n, 0);

    priority_queue<LL, vector<LL>, Less> pq;
    LL sum = 0, sum1 = 0, sum2 = 0;//总和、奇数和、偶数和
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        if (a[i] % 2 == 0) pq.push(a[i]);
        else sum1 += a[i];
    }
    //处理k次
    for (int i = 0; i < k; i++)
    {
        if (pq.empty())  break;
        //除2之后可能不是偶数,是偶数入队列,不是加到sum1即可
        LL tmp = pq.top() / 2;
        pq.pop();
        if (tmp % 2 == 0) pq.push(tmp);
        else sum1 += tmp;
    }
    //统计sum2偶数部分的和
    while (!pq.empty())
    {
        sum2 += pq.top();
        pq.pop();
    }
    sum = sum1 + sum2;
    cout << sum;
    return 0;
}

25_7_10

第一题:Fibonacci数列

Fibonacci数列_牛客题霸_牛客网

利用滚动的三个数模拟斐波那契数列,当n<c的时候计算出n距离b和c的距离,输出较小值即可

#include <iostream>
using namespace std;

int main() 
{
    int n = 0; 
    cin >> n;
    int a = 0, b = 1, c = 1;
    while(n > c)
    {
        a = b; 
        b = c; 
        c = a + b;
    }
    cout << min(n - b, c - n);
    return 0;
}
// 64 位输出请用 printf("%lld")

第二题:单词搜索

单词搜索_牛客题霸_牛客网

class Solution
{
    int m, n;
    bool vis[101][101] = { 0 };
    
    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {1, -1, 0, 0};
  public:
    bool exist(vector<string>& board, string word) {
        m = board.size(), n = board[0].size();
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == word[0]) {
                    if (dfs(board, i, j, word, 0)) return true;
                }
            }
        }
        return false;
    }
    bool dfs(vector<string>& board, int i, int j, string& word, int pos) {
        if (pos == word.size() - 1) {
            return true;
        }
        vis[i][j] = true;
        for (int k = 0; k < 4; k++) {
            int a = i + dx[k], b = j + dy[k];
            if (a >= 0 && a < m && b >= 0 && b < n && !vis[a][b] && board[a][b] == word[pos + 1]) {
                if (dfs(board, a, b, word, pos + 1)) return true;
            }
        }
        vis[i][j] = false;
        return false;
    }
};

25_7_11

第二题:腐烂的苹果_牛客题霸_牛客网

多源BFS+最短优先路径

class Solution {
    int m, n;
    int dx[4] = {0, 0, 1, -1};
    int dy[4] = {1, -1, 0, 0};
    bool vis[1010][1010] = { 0 };
  public:
    int rotApple(vector<vector<int> >& grid) {
        m = grid.size(), n = grid[0].size();
        queue<pair<int, int>> q;
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                if (grid[i][j] == 2)
                    q.push({i, j});

        int ret = 0;
        while (q.size()) {
            int sz = q.size();
            ret++;
            while (sz--) {
                auto [a, b] = q.front();
                q.pop();
                for (int i = 0; i < 4; i++) {
                    int x = a + dx[i], y = b + dy[i];
                    if (x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1
                            && !vis[x][y]) {
                        vis[x][y] = true;
                        q.push({x, y});
                    }
                }
            }
        }
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                if (grid[i][j] == 1 && !vis[i][j])
                    return -1;

        return ret - 1;
    }
};

第三题:孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网

约瑟夫环:

使用动态规划的方法可解:

dp[i]表示i个孩子时最后剩下的孩子编号(即下标)

假设现有n个孩子,最后剩下的就是dp[n],那么删除m-1下标的孩子之后还剩下n-1个孩子;将这n-1个孩子围成一个新的圈,最后剩下的就是dp[n-1],这个新圈开始编号时和旧圈的编号的关系是:新圈编号加上m等于旧圈编号;那么就有dp[n] = (dp[n-1] + m) % n(为了防止m过大),这两个圈实际上是一个圈,新圈的下标是删除了一个之后重新开始数到m-1的编号,从新圈中数出来m-1位置之后要还原成旧圈即本来的下标,就要+m

class Solution {
public:
    int LastRemaining_Solution(int n, int m) {
        // vector<int> dp(n + 1, 0);
        // for(int i = 2; i <= n; i++)//i为围成圈的孩子的数量
        // {
        //     dp[i] = (dp[i - 1] + m) % i; 
        // }
        // return  dp[n];
        //空间优化的写法:
        int f = 0;//一个孩子的时候
        for(int i = 2; i <= n; i++)//i表示有几个孩子
        {
            f = (f + m) % i;
        }
        return f;
    }
};

25_7_12

第三题:大数乘法_牛客题霸_牛客网

计算这种大数相乘、大数相加的问题不能够直接用数字因为数据太大会溢出,要模拟每一位相乘的过程

先用数组记录两个数字位相乘的结果,并且放到下标为这两个数字在各自字符串下标相加的位置上,这样最后算进位时结果正确

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 第一个整数
     * @param t string字符串 第二个整数
     * @return string字符串
     */
    string solve(string s, string t) {
        // write code here
        if(s == "0" || t == "0") return "0";
        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());
        int n = s.size(), m = t.size();
        vector<int> arr(n + m - 1, 0);
        //无进位相乘相加
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                arr[i + j] += (s[i] - '0') * (t[j] - '0');
            }
        }
        //最后统一进行进位处理
        string ans;
        int tmp = 0;//进位
        for(int i = 0; i < arr.size(); i++)
        {
            arr[i] += tmp;
            tmp = arr[i] / 10;//进位
            arr[i] %= 10;//本位
            ans += arr[i] + '0';
        }
        if(tmp) ans += tmp + '0';
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

23种设计模式-中介者(Mediator)设计模式 软考中级-软件设计师 中介者设计模式 阅读详情

相关推荐

手把手教你用示波器测试DDR5 DRAM信号完整性(附眼图分析技巧)

本文详细介绍了如何使用示波器测试DDR5 DRAM信号完整性,包括眼图分析技巧。从DDR5的核心挑战、测试设备选型到实测工作流程,提供了全面的指导。特别强调了DFE功能验证和系统级协同测试,帮助工程师解决信号完整性问题,提升测试效率。

g2h3i4j5的博客 1155

C++笔试强训12、13、14

C++笔试强训12、13、14,共三十道选择题,6道编程题。

m0_74189279的博客 1305

Tushare使用教程

@Tushare简易教程 Python财经数据接口Tushare 最近在看量化分析有关的东西,然后第一步先了解的就是如何获取股票交易数据。发现大部分教程都是关于Tushare的,于是在这里简单的介绍一下Tushare的用法吧。目前tushare有免费版本和升级的需要付费的Pro版本。大多数教程写的都是免费版本,但是pro版本提供的数据更多,但是由于本人入坑还不深,暂时还是用的免费版本,但是每次使用都收到提示,“本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/documen

kuangzhi9124的博客 2万+

C++笔试强训15、16、17

在同一个作用域内,可以有多个同名函数,但这些函数的参数列表(参数的数量、类型或顺序)必须不同。重载是编译时多态的一种体现。

m0_74189279的博客 1133

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码)

本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。

ss78901的博客 467

LVDS接口总结--(0)LVDS硬件电路接口

xilinx LVDS接口硬件总结

zidan1412的博客 9721

【笔试强训】Day 7

但行好事,莫问前程

qq_42996461的博客 2369

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 528

C++笔试强训18、19、20

如果在父类构造函数中调用虚函数,由于调用构造函数的顺序是先调用父类的构造函数再调用子类的构造函数,所以这个时候子类还没初始化呢,如果形成多态会发生一些未定义的错误,所以就只能调用父类的虚函数,所以不会发生多态。然后调用子类的构造函数,子类构造函数中调用了父类成员函数test,test中调用会使用父类的this指针调用func函数,会发生多态,因为父类this指针指向的是子类对象,所以会调用子类的成员函数func,会。C/D:map、set底层都是红黑树,每个节点之间不是连续的,节点之间是通过指针相连的。

m0_74189279的博客 894

Python爬虫实战:使用最新技术爬取GitHub Trending项目

本文将详细介绍如何使用Python最新技术栈构建一个高效的GitHub Trending爬虫。我们将使用异步请求库httpx、HTML解析库parsel、数据存储方案以及反反爬技术,完整实现一个能够稳定获取GitHub Trending数据的爬虫系统。文章包含5000余字详细教程,从环境搭建到代码实现,再到数据处理和存储,最后部署运行,提供全方位指导。GitHub Trending页面展示了GitHub上当前最受欢迎的项目,对于开发者了解技术趋势、发现优秀项目非常有价值。

2201_76125261的博客 738

YOLO26小目标检测实战:STAL标签分配+MuSGD优化,VisDrone数据集漏检率降50%

小目标检测是计算机视觉的经典难题,而VisDrone数据集小目标占比极高:数据集中小目标(像素面积<32×32)占比超过60%,且大量目标仅为几个像素,特征信息极度匮乏;背景复杂且干扰多:无人机航拍场景包含建筑物、树木、人群、车辆等复杂背景,小目标易被背景淹没;尺度变化与遮挡严重:同一目标在不同帧中尺度差异大,且小目标极易被其他目标遮挡;传统模型的固有缺陷标签分配策略(如ATSS、SimOTA)偏向大目标,小目标的正样本分配不足,导致模型对小目标不敏感;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1186

48天C++笔试强训 001

讲解48天笔试强训第一天的题目

小萌新的博客 3326

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

笔试强训:Day4

改进版本:让lambda函数可以递归调用,需要用到function封装。利用返回值将树的高度带回,-1表示不是平衡二叉树。情况2:整个串都是回文 return n-1。情况3:整个串不是回文 return n。情况1:所以字符都一样 return 0。改进版本:将lambda作为参数。解法1:floodfill算法。解法2:并查集+lambda。利用引用将树的高度带回。

weixin_51142926的博客 1515

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

笔试强训:Day1

笔试精炼

weixin_51142926的博客 1558

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

笔试强训:Day5

本文汇总了多个算法题目的解决方案,涵盖了哈希表、数学、动态规划、贪心算法、二分查找、滑动窗口、BFS、DFS等多种算法技巧。

weixin_51142926的博客 1492

【笔试强训】Day01

本文整理了笔试强训 Day01 的三道题,涵盖了枚举、排序、哈希和栈等常见技巧,带你快速回顾高频算法思路。

qq_2778465975的博客 1274

【笔试强训】Day2

但行好事,莫问前程

qq_42996461的博客 1514

【笔试强训】Day 6

但行好事,莫问前程

qq_42996461的博客 1901

笔试强训:Day2

解法1:计数 然后让长的先走 然后再一起走。解法2:贪心:把交易拆成一天一天。解法2:等价关系(数学特性)解法2:找规律+位图。

weixin_51142926的博客 1009

笔试强训:Day3

解法1:定长滑动窗口。

weixin_51142926的博客 870

【笔试强训】Day 3

但行好事,莫问前程

qq_42996461的博客 1645

【笔试强训】Day 4

但行好事,莫问前程

qq_42996461的博客 1565

【笔试强训】Day1

但行好事,莫问前程

qq_42996461的博客 1414

【笔试强训】Day 5

但行好事,莫问前程

qq_42996461的博客 1068

【C++笔试强训】第五天

很高兴这是自己坚持的第五天

m0_60338933的博客 3187

笔试强训:Day8

本文整理了18道编程题解,涵盖概率论、排序、动态规划、贪心、搜索等算法。主要内容包括: 概率计算:如抽卡问题使用组合数学计算期望值 排序应用:通过排序+二分解决区间统计问题 动态规划:包括股票买卖、汉诺塔、区间DP等经典模型 搜索算法:DFS解决因子分解、排列组合等问题 贪心策略:应用于非降序列、AOE技能选择等场景 双指针/滑动窗口:优化区间统计、雨水收集等问题 数学推导:如前缀和+数学公式解决加减操作问题 特殊数据结构:单调栈处理栈排序、哈希表标记皇后攻击范围 每道题都给出了核心解法思路和关键代码实现,

weixin_51142926的博客 2333
上一篇: 优先算法——专题九:链表
下一篇: 优先算法——专题十:哈希表
溪苏.
博客等级 码龄3年 995粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值