机试_5_递归和分治

递归与分治总结 一 递归的概念     递归算法是指直接或间接调用自身的算法,递归函数是用函数自身给出定义的函数。递归的优势在于能够使函数的定义和算法的描述简捷且易于理解,使用递归技术可以解决许多复杂问题。递归可以分为两类:基于归纳法的递归和基于分治法的递归。 二 归纳法     求解规模为n的问题P(n),设a1是问题P(1)的解,且对所有的k,1<k<n,若ak是问题P(k)的解,则P(ak)是问题P(k+1)的解。其中,P(ak)是对ak的某种运算或处理。     其求解过程为: 为求问题 P(n) 阅读详情

一、递归

本章介绍程序设计中的另一个非常重要的思想一递归策略。递归是指函数直接或间接调用自身的一种方法,它通常可把一个复杂的大型问题层层转化为与原问题相似但规模较小的问题来求解。递归策略只需少量的程序就可描述解题过程所需的多次重复计算,因此大大减少了程序的代码量。


1、n的阶乘–清华大学

描述

输入一个整数n,输出n的阶乘(每组测试用例可能包含多组数据,请注意处理)

输入描述:

一个整数n(1<=n<=20)

输出描述:

n的阶乘

示例1

输入:

3

输出:

6

题解:

递归的两个关键点:
1. 递归出口
2. 递归调用
#include <iostream>
#include <cstdio>

using namespace std;

/**
 * 求num的阶乘
 * 注意阶乘的结果很大,所以返回值类型要是long
 * @param num 
 * @return 
 */
long factorial(int num) {
    if (num == 0 || num == 1) {
        /*
         * 特殊值
         * 0和1的阶乘都是1
         */
        return 1;
    }
    return num * factorial(num - 1);
}

/**
 * n的阶乘--清华大学
 * @return
 */
int main() {
    int n;
    while (cin >> n) {
        cout << factorial(n) << endl;
    }

    return 0;
}

2、汉诺塔III–杭州电子科技大学

描述

约19世纪末,在欧洲的商店中出售一种智力玩具:在一块铜板上有三根杆,最左边的杆自上而
下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的圆盘全部移到右边的杆上,条件是一次只能移动一个圆盘,并且不允许大圆盘放在小圆盘的上面。现在我们改变这个游戏的玩法:不允许直接从最左(右)边移动到最右(左)边(每次移动一定是移到中间杆或从中间杆移出),也不允许大圆盘放到小圆盘的上面。Daisy已经做过原来的汉诺塔问题和汉诺塔Ⅱ问题,但碰到这个问题时,她想了很久都无法解决。请你帮助她。现在有N个圆盘,她至少需要多少次移动才能把这些圆盘从最左边移到最右边?

输入描述:

包含多组数据,每次输入一个N值(1 <= N <= 35)。

输出描述:

对于每组数据,输出移动最小的次数。

示例1

输入:

1
3
12

输出:

2
26
531440

题解:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include <iostream>
#include <cstdio>

using namespace std;

long long Hanoi01(int n) {
    if (n == 1) {
        return 2;
    } else {
        return 3 * Hanoi01(n - 1) + 2;
    }
}

long long Hanoi02(int n) {
    long long ans = 1;
    for (int i = 0; i < n; ++i) {
        ans *= 3;
    }
    ans -= 1;
    return ans;
}

/**
 * 汉诺塔III--杭州电子科技大学
 * @return
 */
int main() {
    int n;
    while (cin >> n) {
        cout << Hanoi01(n) << endl;
        //cout << Hanoi02(n) << endl;
    }

    return 0;
}

二、分治

分治法(Divide and Conquer)是另一个非常重要的算法。

分治法字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多个子问题,子问题之间互相独立且与原问题相同或相似。之后再把子问题分成更小的子问题,以此类推,直到最后的子问题可以简单地直接求解,原问题的解即子问题的解的合并。

由于分治法产生的子问题往往与原问题相同且模式更小,这就为使用递归策略求解提供了条件。

在这种情况下,通过反复利用分治手段,可以使子问题的规模不断缩小,最终缩小到可以直接求解的情况。在从过程中会导致了递归过程的产生。分治与递归就像一对孪生兄,经常同时应用在算法设计中,这也是将分治法和递归策略放在同一章中进行讲解的原因。

分治法的步骤如下:
1. 分:将问题分解为规模更小的子问题。
2. 治:将这些规模更小的子问题逐个击破。
3. 合:将已解决的子问题合并,最终得出"母"问题的解。

分治法 和 贪心策略 
相同点:问题分解
区别:
	1. 分治法--子问题可能会继续分解
	2. 贪心策略--子问题将无需继续分解

1、Fibonacci–上海交通大学

描述

The Fibonacci Numbers{0,1,1,2,3,5,8,13,21,34,55…} are defined by the recurrence: F0=0 F1=1 Fn=Fn-1+Fn-2,n>=2 Write a program to calculate the Fibonacci Numbers.

输入描述:

Each case contains a number n and you are expected to calculate Fn.(0<=n<=30) 。

输出描述:

For each case, print a number Fn on a separate line,which means the nth Fibonacci Number.

示例1

输入:

1

输出:

1

题解:

三种解法:
1. 分治法--O(2ⁿ)
2. 递推法--O(n)
3. 矩阵快速幂--O(logn)
分治法
分为 F(n-1) 和 F(n-2)
将规模为N的问题分解为两个规模分别为N-1、N-2的子问题,不断分解,直到问题规模小于0或者1,便可直接得到子问题的答案。
之后将子问题的答案相加,便可得到母问题的答案。
虽然分治法不是此题的最优解法,但其思想还是值得学习的。

#include <iostream>
#include <cstdio>

using namespace std;

int fibonacci(int n) {

    if (n == 1 || n == 0) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

/**
 * Fibonacci--上海交通大学
 * @return
 */
int main() {
    int n;
    while (cin >> n) {
        cout << fibonacci(n) << endl;
    }

    return 0;
}


/*
 * 递推法
 */
#include <iostream>
#include <cstdio>

using namespace std;

const int MAX = 35;

int fibonacci[MAX];

void init() {
    fibonacci[0] = 0;
    fibonacci[1] = 1;
    /*
     * 从索引2开始
     */
    for (int i = 2; i < MAX; ++i) {
        fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
    }
}

/**
 * Fibonacci--上海交通大学
 * @return
 */
int main() {
    init();
    int n;
    while (cin >> n) {
        cout << fibonacci[n] << endl;
    }

    return 0;
}

在这里插入图片描述

/*
 * 矩阵快速幂
 */
#include <iostream>
#include <cstdio>

using namespace std;

/**
 * 矩阵维数
 */
const int DIMENSION = 2;

/**
 * 矩阵
 */
struct Matrix {
    int row;
    int col;
    int matrix[DIMENSION][DIMENSION];

    Matrix(int row, int col) {
        this->row = row;
        this->col = col;
    }
};

/**
 * 矩阵乘法
 * @param x
 * @param y
 * @return
 */
Matrix multiply(Matrix x, Matrix y);

/**
 * 矩阵求幂
 * @param x
 * @return
 */
Matrix quickPower(Matrix x, int n);

/**
 * 打印矩阵
 * @param x
 */
void printMatrix(Matrix x);


/**
 * Fibonacci--上海交通大学
 * @return
 */
int main() {
    int n;
    while (cin >> n) {
        Matrix fibonacci = Matrix(2, 2);
        fibonacci.matrix[0][0] = 1;
        fibonacci.matrix[0][1] = 1;
        fibonacci.matrix[1][0] = 1;
        fibonacci.matrix[1][1] = 0;

        Matrix power = quickPower(fibonacci, n);
        Matrix tmp = Matrix(2, 1);
        tmp.matrix[0][0] = 1;
        tmp.matrix[1][0] = 0;
        Matrix ans = multiply(power, tmp);
        /*
         * 可以打印矩阵进行验证
         */
        //printMatrix(ans);
        cout << ans.matrix[1][0] << endl;

    }

    return 0;
}

Matrix multiply(Matrix x, Matrix y) {
    Matrix ans(x.row, y.col);
    for (int i = 0; i < ans.row; ++i) {
        for (int j = 0; j < ans.col; ++j) {
            ans.matrix[i][j] = 0;
            for (int k = 0; k < x.col; ++k) {
                ans.matrix[i][j] += x.matrix[i][k] * y.matrix[k][j];
            }
        }
    }
    return ans;
}

Matrix quickPower(Matrix x, int n) {
    Matrix ans = Matrix(x.row, x.col);
    for (int i = 0; i < ans.row; ++i) {
        for (int j = 0; j < ans.col; ++j) {
            if (i == j) {
                ans.matrix[i][j] = 1;
            } else {
                ans.matrix[i][j] = 0;
            }
        }
    }

    while (n != 0) {
        if (n % 2 == 1) {
            ans = multiply(ans, x);
        }
        n = n >> 1;
        x = multiply(x, x);
    }

    return ans;
}

void printMatrix(Matrix x) {
    for (int i = 0; i < x.row; ++i) {
        for (int j = 0; j < x.col; ++j) {
            if (j == 0) {
                cout << x.matrix[i][j];
            } else {
                cout << " " << x.matrix[i][j];
            }
        }
        cout << endl;
    }
}

2、二叉树–北京大学

描述

img

如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。

输入描述:

输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000000000)。

输出描述:

对于每一组测试数据,输出一行,该行包含一个整数,给出结点m所在子树中包括的结点的数目。

示例1

输入:

3 12
0 0

输出:

4

题解:

对于求根结点为m的树中有多少结点数目这个问题,可以将问题分解为求它左子树和右子树的结点数目这两个相同的子问题。
在得到其左、右子树的结点数目后,加上结点m本身便可得到问题的解。

当结点m大于时,以m为根结点的树为空,那么该树的结点数目必定为0,这个便是这个问题可被轻松求解的底层子问题,也是递归出口。
#include <iostream>
#include <cstdio>

using namespace std;

int countNode(int m, int n) {
    if (m > n) {
        /*
         * 递归出口
         * 因为一共就n个顶点,所以m>n时结束即可
         */
        return 0;
    } else {
        /*
         * 根节点+左子树的节点数+右子树的节点数
         */
        return 1 + countNode(2 * m, n) + countNode(2 * m + 1, n);
    }
}

/**
 * 二叉树--北京大学
 * @return
 */
int main() {
    int m;
    int n;
    while (cin >> m >> n) {
        cout << countNode(m, n) << endl;
    }

    return 0;
}

分治与递归 分治与递归 递归是一种方法; 分治是一种思想; 分治可以用递归来实现,也可以不用递归 普通分治:分治的各个层次的各解决方案不同 递归分治:分治的各个层次的解决方案相同 分治 分治的基本思想 分治算法是将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 如果原问题可分割成k个子问题,1<k≤n,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。 在这种情况下, 阅读详情

相关推荐

算法实验——递归与分治

  一、实验目的: 理解递归算法的思想和递归程序的执行过程,并能熟练编写递归程序。 掌握分治算法的思想,对给定的问题能设计出分治算法予以解决。 具体要求: 1. 分析并掌握“棋盘覆盖问题”的递归与分治算法示例; 2. 练习使用递归与分治策略求解具体问题; 二、实验环境: Visual C++ 实验环境 三、实验内容: (写出主要的内容) 1. 1) 编写完整的主函数,分别记...

yezongzhen的博客 8141

2020-09-27 二叉树节点问题

描述 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。 输入描述 输入数据包括多行,每行给出一组测试数据,包括两个整数m,n (1 <= m <= n <= 1000...

u011692164的专栏 602

众数问题-递归和分治

问题描述        给定一个数组,找出其中出现次数最多的那个元素(即众数)。 例如: 1 2 2 2 3 5 众数是: 2 算法思路:先排序  后用分治法计算求解 分治法求解代码如下: #include #include #include using namespace std; /*----------快速排序*/ int Partit

-_-独行侠>_> 5027

2018年全国多校算法寒假训练营练习比赛(第二场)F - 德玛西亚万岁

链接:https://www.nowcoder.com/acm/contest/74/F来源:牛客网 题目描述 德玛西亚是一个实力雄厚、奉公守法的国家,有着功勋卓著的光荣军史。 这里非常重视正义、荣耀、职责的意识形态,这里的人民为此感到强烈自豪。 有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优秀的战士。 结果比尔吉沃特领土太小,只有长为n宽为m共计n*m块土地...

weixin_33796205的博客 337

Python手记-9:Python LXML库XPath的爬取晋江书目

1. lxml库 lxml是功能最丰富且易于使用的库,用于处理Python语言中的XML和HTML,还可实现WEB爬取,官文参考:https://lxml.de/,完整的PDF文档下载链接https://lxml.de/lxmldoc-4.5.0.pdf,但是阅读起来……em……怪自己不够聪明的样子。 Linux下安装lxml库:[root@chengyu ~]# pip3 instal...

成屿的专栏 4万+

【Tessent Shell Users Manual】【Ch3】Design Introspection and Editing(未完待续)

Tessent Shell 提供了一系列用于检查(examining/introspecting)和编辑design的命令。

Tranquil_ovo的博客 1731

二叉树

牛客的数据,没我学校的数据强,哭了戳我! 描述 如上图所示,由正整数1,2,3……组成了一颗二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。 输入 输入数据包括多...

日拱一卒,功不唐捐 2838

ROG幻16Air新机避坑:Ubuntu 22.04下NVIDIA驱动、CUDA与Isaac Gym的兼容性实战

本文详细记录了在ROG幻16Air新机上安装Ubuntu 22.04,并成功配置NVIDIA驱动、CUDA与Isaac Gym强化学习开发环境的完整实战过程。针对官方文档未明确支持Ubuntu 22.04的挑战,文章提供了从驱动安装、CUDA版本选择、Python虚拟环境搭建到Isaac Gym兼容性调试的一站式解决方案,帮助开发者在新硬件上高效部署机器人仿真与训练平台。

weixin_28419039的博客 220

题目33:二叉树

http://ac.jobdu.com/problem.php?cid=1040&pid=32 题目描述: 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所...

weixin_30302609的博客 424

ST MCSDK V6.2.0实战:手把手教你配置HSO-ST观测器,体验500ms收敛的电机无感控制

本文详细介绍了ST MCSDK V6.2.0中HSO-ST观测器的配置方法,实现500ms内电流收敛的无感电机控制。从环境搭建、核心参数解析到无感启动优化,提供实战技巧和性能调优策略,帮助开发者快速掌握高效电机控制技术。

weixin_28720767的博客 579

新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注)

本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。

weixin_28716181的博客 472

Codeup《算法笔记》9.2小节——数据结构专题(2)->二叉树的遍历->二叉树

Problem B: 二叉树 [Creator : Imported] Time Limit : 1.000 sec Memory Limit : 32 MB Description 如上所示,由正整数1,2,3……组成了一颗特殊二叉树。我们已知这个二叉树的最后一个结点是n。现在的问题是,结点m所在的子树中一共包括多少个结点。 比如,n = 12,m = 3那么上图中的结点13,14,15以及后面的结点都是不存在的,结点m所在子树中包括的结点有3,6,7,12,因此结点m的所在子树中共有4个结点。 I

weixin_45981887的博客 682

单目标跟踪算法及其复现过程---SiamFC(一)

在test.py文件中,就是利用训练出来的模型进行测试,需要更改预训练模型的路径,测试集的路径,以OTB100为例,最后输出的是对每一帧目标位置的坐标点。代码如下:首先需要下载got10k官方库,只需要在终端输入(注意:在终端安装各种库的时候不能使用网络代理),在环境已经配置到的情况下,只需要该其中的路径和就可以运行。这个系列博客仅为了记录各目标跟踪算法的复现(大多为跑通大佬们实现的代码),包括其中出现的很多问题和错误,学到的新知识等等。解决,而且只使用在线的方法,限制了他们可以学习的模型的丰富性。

weixin_58244117的博客 4760

【算法题】机试指南-递归、分治、搜索篇

本文仅供个人学习使用,免费分享。目前[机试指南]本系列已经达到字数10w+,所以按原每个章节拆开发布,点击目录跳转。

你的每一个关注每一次观看都会支持我越来越好,关注能加快我的更新速度~ 986

QML 果冻抖动:用 Scale 动画模拟 Q 弹反馈

介绍果冻抖动效果:点击后卡片通过多段 ParallelAnimation 实现 Scale X/Y 反向缩放和逐步衰减,模拟果冻弹性形变;进阶版本加入小幅 Rotation 增加活泼感,适合游戏、儿童应用等趣味反馈场景。

u011186532的专栏 424

出现 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the 解决方法

Access to XMLHttpRequest at 'http://127.0.0.1:5000/api/data' from origin 'http://10.197.0.79:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

码农研究僧的博客 1万+

华为OD机试(含B卷)真题2023 算法分类版,58道20个算法分类,如果距离机考时间不多了,就看这个吧,稳稳的

我觉得可以按照“算法和数据结构”去刷,把华为OD机试涉及到的“算法和数据结构”列出来,一个算法刷10道题,那我岂不是无敌了?后面是为大家 精心挑选的华为OD机试题单,并根据题目知识点的类型分好了类别,大家可以根据每个知识点,进行有针对性的刷题。很多小伙伴问我,华为OD机试算法题太多了,知识点繁杂,如何刷题更有效率呢?下面是我花了一天时间整理的 算法和数据结构的知识结构,大家可以看看。首先,了解算法和数据结构有哪些知识点,在后面的刷题中有 大局观。迪杰斯特拉Dijkstra。回溯法(宽度优选算法)

学Java,找哪吒 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

递归和分治(基础)

在数学及程序设计方法学中为递归下的定义是这样的:若一个对象部分包含地包含它自己,或用它自己来定义它自己,则称这个对象是递归的;若一个过程直接或间接的调用自己,则称这个过程为递归的过程。简而言之,递归方法就是直接或间接地调用其自身1、什么时候会用到递归的方法以数学上常用的阶乘函数为例,其定义和计算都是递归的定义:return 1;递归过程在实现时,需要自己调用自己层层向下递归,退出次序正好相反主程序第一次递归调用自己为内部调用它们返回调用它的过程的地址不同。

m0_63783532的博客 4622

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

机试指南:Ch5:线性数据结构 Ch6:递归与分治

机试指南:5-6章。vector、queue、stack、递归分治

Edward2022的博客 1817

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

机试能力很差怎么办?哪些学校cs夏令营没有机试?

此外,面试组老师也是会关注机试成绩的,如果机试分数较低,在面试时很可能针对这一点被发问,需要提前做好答复准备。此外,在夏令营机试考核中,对字符串处理(字符串匹配、词频统计等)、搜索算法(DFS/BFS)、列表队列处理(增删查改)的考察较频繁,也需要多做准备。进入考场后首先要检查自己的设备硬件(键鼠等)是否正常,然后试着调试IDE,看看常见的代码提示、括号匹配、断点调试是否正常、编译器能否更换为自己常用的等等。其次,要学会读别人的代码,学习他人更简洁有效的思路,并试着举一反三,从而更快成长。

Baoyan_cs的博客 2391

分治策略和递归

分治策略和递归

m0_57787502的博客 1078

<算法学习>递归与分治

递归与分治算法学习

caswind的博客 1368

递归与分治

一、递归与分治概述: 1、分治方法在于分和治。将一定规模的问题划分成性质相同的若干个小问题,分;对于每个小问题,进行所需要进行的操作,如排序等。 2、关于递归: (1)递归中需要的成分是递归边界和递归规则,没有递归边界递归无法停止、无法进行。 (2)通过将各层的关系从小到大逐渐带入,可以求解出一个函数的非递归表达式。 (3)n该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共...

qq_41464448的博客 2725

复试机试算法总结#7:递归与分治

1. 递归

学而不思则忘,思而不学则die 162

【基础算法实战2.0】递归与分治算法

在算法设计的过程中,递归与分治算法常常被作为解决复杂问题的重要工具。它们能够通过巧妙的思维,将问题拆解成较小的子问题逐步求解。本文将结合个人的一些理解,详细探讨递归与分治算法的原理、应用场景,以及如何在实际问题中使用这些算法。

2301_79633602的博客 2353

递归和分治法

递归和分治法 将问题分解,通过求解局部性的小问题来解开原来的问题,这种技巧称为分治法。 同时分治法需要用到递归。 递归 递归函数是指自己调用自己的函数,是设计算法时的一种编程技巧。 但是注意,递归函数必须有一个终点,否则程序会一直运行下去。 分治法 利用递归的技巧,将问题分成多个局部问题,使用递归函数求出每个局部问题的解,再将结果整合,最终解决原问题,这种编程手法称为分治法。 1.将问题分割成多个局部问题。 2.递归求出局部问题。 3.将局部问题...

Eternal嘉的博客 2137
上一篇: 机试_4_数学问题
下一篇: 机试_6_数据结构(二)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值