【算法设计zxd】第2章 算法分析实例 递归非递归——交换,n阶乘,矩阵乘法,汉诺塔,二路归并,

枚举算法:韩信点兵。 韩信点兵。韩信在点兵的时候,为了知道有多少名士兵,同时又能保住军事机密,便让士兵排队报数。 按从1至5报数,最末一个士兵报的数为1。 再按从1至6报数,最末一个士兵报的数为5。 再按1至7报数,最末一个士兵报的数为4。 最后按1至11报数,最末一个士兵报的数为10。 你知道韩信至少有多少名士兵? 思路: 设原来有x名士兵,根据报数的情况可以得到, x%5= =1, x%6= =5, x% = =4, x%11= =10, 并且这几个情况需要同时满足。 由此可以得出结果x。 流程图: 代码: #includ 阅读详情

目录

非递归形式算法分析:

递归形式算法分析:

【例2-9】交换a和b的值。

非递归

 【例2-10】求n!

非递归:

思考题:韩信点兵

【例2-11】对于任意给定的n阶方阵A和B,求A×B的积C并且 分析它算法执行效率。

问题分析:

计算模型:

非递归:

【例2-13】汉诺塔(Tower of Hanoi)问题。

 问题分析:

计算规模:​

【例2-14】试分析二路归并排序算法的时间复杂度。



非递归形式算法分析:

 决定用哪些参数表示输入规模;
找出算法的核心操作,它通常位于算法的最内层循环中;
检查核心操作的执行次数是否只依赖于输入规模。如果 它还依赖于一些其他的特性,则可能需要对最差效率、 平均效率以及最优效率分别研究;
以式 (2-1) 的思想为核心,建立一个算法基本操作执行次 数的求和表达式;
利用求和运算标准公式和法则来建立一个操 作次数的闭合公式,或者至少确定它的增长
次数。

递归形式算法分析:

决定用哪些参数作为输入规模的度量标准;
找出算法的核心操作,它通常是递推公式;
检查一下,对于相同规模的不同输入,核心操作的执 行次数是否可能不同。如果有这种可能,则必须对最 差效率、平均效率以及最优效率做单独研究;
对于算法核心操作的执行次数,建立一个递推关系以 及相应的边界条件;
解这个递推式,或者至少确定它的解的增长 次数。
谨慎使用递归算法,因 为它们的简洁可能会掩 盖其低效率的事实。

【例2-9】交换a和b的值。

非递归

算法设计与描述算法分析
输入:a,b(1)输入a,b两个数,规模为2
输出:a,b

swap(a,b)

{
        Temp <- a;

        a <- b;

        b <- Temp;

        output(a,b);

}

(2)核心操作为3条交换语句;

(3)核心操作执行的次数是一个与输入规模无关的常数

(4)算法的时间复杂度为常数阶 T(n)= O(1)   //O渐近上界 0 ≤ f(n)  ≤ c*g (n )

 【例2-10】求n!

非递归:

算法设计与描述算法分析
输入:n(1)输入n,规模为n ,控制迭代次数。
输出:n !

F (n)

{
        s <- 1;

        for i <- 1 to n do

                s=s*i ;

        output(s);

}

(2)核心操作为 s=s*i ; 一次乘法运算

(3)核心操作执行的次数,只受输入规模n控制

(4)依据定理2.5 算法的时间复杂度为常数阶 T(n)= ∑(n,i=1) 1 = Θ(n) //渐近紧界

递归:
计算模型:
算法设计与描述算法分析
输入:n(1)输入n,规模为n ,计算规模也是n
输出:n !

F (n)

{
        if(n==0) return 1;

        else return n*F(n-1);

}

(2)核心操作为 n*F(n-1) ; 一次乘法运算

(3)根据递推公式,每递推一次,执行一次乘法操作,因此有以下推导过程:
T(n) =1+T(n-1) =1+1+T(n-2)……=1+1+…+1+T(1)=1+1+…+1=n=Θ(n)

(4) //渐近紧界

思考题:韩信点兵

#include<iostream>
using namespace std;
int main()
{
	int n=1;
	while( (n%3!=2)||(n%5!=3)||(n%7!=2)){
		n++;
	}
	cout<<n;//23
	return 0;
 } 

优化:

//a,b,c中,c的大小对该结果影响最大,因此从c入手可以稍微提高运算效率。
void hanxin01()
{
	int n=9;//7+2
	int i=0; 
	while(true)
	{
		if(n%3==2&&n%5==3)
		break;
		i++;
		n+=7;
	}
	cout<<"次数:"<<i<<"结果"<<n<<endl;
} 

【例2-11】对于任意给定的n阶方阵A和B,求A×B的积C并且 分析它算法执行效率。

问题分析:

C也是n阶方阵,每个元素 = 矩阵A的行 和矩阵B的列 的点积 。

对于 i>=0 , j<= n-1 的每一对下标 ,有 C[i,j] = A[i,0]B[0,j] +... + [i,k]B[k,j] + .... + A[i,n-1]B[n-1,j] 

计算模型:

设 i , j, k ∈[0, n-1],矩阵运算中将反复执行下述计算公式:

非递归:

算法设计与描述算法分析
输入:A,B (1)输入A,B,规模为n x n 
输出:C=Ax B

MatrixMultiplication  (A[n] ,B[n] )

{

        for i <- 0 to n-1 do

                for j <- 0 to n-1 do

                {

                        C[i,j] <- 0.0 ;

                        for k <- 0 to n-1 do

                                C[i,j] = C[i,j] + A[i,k]*B[k,j];

                }

        return C;

}

(2)核心操作 通过加法和乘法运算 求C[i,j]

(3)核心操作执行的次数,只受输入规模n控制 ∑(n-1 , k=0) 1 

(4)依据定理2.5 算法的时间复杂度为常数阶 T(n)=  Θ(n^3 ) //渐近紧界

【例2-13】汉诺塔(Tower of Hanoi)问题。

如图 2-2 所示,有 n个 大小不同的盘子和 3 根木桩。开始时,所有盘子都套在第A根 木桩上,最大的盘子在底部,最小的盘子在顶部。现在要借 助第 B 根木桩把所有盘子都移动到第 C根木桩上,但是移动时, 必须保证大盘子在下面,小盘子在上面。

 问题分析:

把n 个盘子从木桩A移到木桩C,三个步骤:
1)把n-1个盘子从木桩A移到木桩B,借助于木桩C;
2)把一个盘子从木桩A移到木桩C
3)把n-1个盘子从木桩B移到木桩C,借助木桩A

计算规模:

 递归:

算法设计与描述算法分析
输入:n(1)输入n,计算规模是n
输出:显示

Hanoi (A,C,n)

{
        if(n==1) move(A,C,1);//移动展示

        else 

        {

                Hanio(A,B,n-1);//n-1个盘子,从A移到B,借助另一个

                move(A,C); // 从A移动到C

                Hanoi(B,C,n-1); //

        }

}

(2)核心操作为 移动盘子

(3)根据递推公式,。。。【不全】

 

 

【例2-14】试分析二路归并排序算法的时间复杂度。

问题分析:

二路归并排序的思想是:将待排序 的数列分成相等的两个子数列(数量 相差±1),然后,再使用同样的算 法对两个子序列分别进行排序,最 后将两个排好的子序列归并成一个 有序序列。
代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
//二路归并
int a[100];
int n=10;
void merge(int a[],int low,int mid,int high)
{
	int sum1=mid-low+1;//元素个数 
	int sum2=high-mid;
	int b[100]={0};
	int c[100]={0};
	for(int i=0;i<sum1;i++)
	{
		b[i]=a[i+low];
	} 
	for(int i=0;i<sum2;i++)
	{
		c[i]=a[i+mid+1];
	}
	//
	int i=0,j=0;
	int k=low;
	while(i<sum1&&j<sum2)
	{
		//先从数组中找出较小的值
		if(b[i]<=c[j])
		{
			a[k]=b[i];
			i++;
		} 
		else
		{
			a[k]=c[j];
			j++;
		}
		k++; 
	}
	//如果有剩余
	if(i>sum1)//c有剩余 
	{
		for(;j<sum2;j++,k++)
		{
			a[k]=c[j];
		}
	} 
	else
	{
		for(;i<sum1;i++,k++)
		{
			a[k]=b[i];
		}
	}
}
void mergesort(int a[],int low,int high)
{
	int mid;
	if(low<high)
	{
		mid=(low+high)/2;
		mergesort(a,low,mid);
		mergesort(a,mid+1,high);
		merge(a,low,mid,high);
	}
}
void init(int a[])
{
	srand(time(0));
	for(int i=0;i<n;i++)
	{
		a[i]=rand()%100;
	}
}
void show()
{
	for(int i=0;i<n;i++)
	{
		cout<<a[i]<<"\t";
	}
	cout<<endl;
}
int main()
{
	init(a);
	show();
	mergesort(a,0,n-1);
	show();
	return 0;
}

算法设计与描述 MergeSort( A,p,r )算法分析【换元迭代】
输入:n个数的无序序列A[p,r] , 1<= p <= r <= n ,(1)输入n,计算规模是n
输出:n个数的有序序列A[p,r]

MergeSort (A,p,r)

{
        if( p<r ) 

        {

                q <- (p+r)/2 ;//中间

                MergeSort (A,p,q); //左侧

                MergeSort(A,q+1,r) ;//右侧

                Merge (A,p,q,r); 

        } 

}

(2)核心操作为 移动盘子

(3)

(4)

换元 

代码代码

Merge

算法设计与描述 Merge( A,p,q,r )算法分析
输入:n按递增顺序排好的 A[p...q] 和 A[q+1...r ](1)输入n,计算规模是n
输出:按照递增顺序排序的A[p,r]

Merge (A,p,q,r)

{

        x <- q-p+1 ,y <- r-q;//x,y分别是两个子数组的元素数

        A[p...q] -> B[1...x] , A[q+1...r] -> C[1...y] //两个新数组
        

        i <- 1 ,j<- 1 ,k <- p 

        while i<=x and j <= y do 

        {

                if ( B[i] <= C[ j ] ) //注意是i 和 j 

                {

                        A[k] <- B[i];//较小数

                        i <- i+1;

                }

                else

               {

                        A[k] <- C[j] ;

                        j <- j+1;

               }

                k=k+1;

        } 

        if(i>x)        C[j...y] -> A[k..r] //如果还要剩余的元素,就不需要比较,直接赋值回去就行

        else         B[i..x] -> A[k...r]

}

(2)核心操作为 移动盘子

(3)根据递推公式,。。。【不全】

中国剩余定理与韩信点兵问题原理 秦王暗点兵问题和韩信乱点兵问题,都是后人对物不知其数问题的一种故事化. 物不知其数问题出自一千六百年前我国古代数学名著《孙子算经》.原题为:"今有物不知其数,三三数之二,五五数之三,七七数之二,问物几何?" 这道题的意思是:有一批物品,不知道有几件.如果三件三件地数,就会剩下两件;如果五件五件地数,就会剩下三件;如果七件七件地数,也会剩下两件.问:这批物品共有多少件? 变成一个纯粹的数学问题 阅读详情

相关推荐

求解“韩信点兵”问题的算法研究...程序设计

求解“韩信点兵”问题的算法研究.这类问题和解法, 一般称它为孙子定理, 外国人称其为“ 中国余数定理” , 它是我国闻名 于世的古代数学定理。 这一工作不仅在数学历史上占有地位, 而且这类阔题的解法的原则在 现代数学中还在起着重要的作用 ] 。

第二章 算法效率分析基础 page 55 汉诺塔问题

汉诺塔问题介绍:        在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片,一次只移动一片,不管在哪根针上,小片必在大片上面。当所有的金片都从梵天穿好的那根针上移到另外一概针上时,世...

u011135963的博客 458

Hyper-V集群部署指南

工欲善其事,必先利其器。搭建一个方便管理的服务集群,是分布式学习很重要的环境。 目前流行的虚拟机产品主要为Vmware 和 win10自带的Hyper-V(win10家庭版无此功能),网上关于Vmware的教程更多,显然它更容易上手,但Hyper-V也算是一个很不错的产品,这里记录一下我的学习过程: 目录 Hyper-V的安装 服务集群的搭建 虚拟机的网络通信 NAT网络的搭建 端口映射 Linux的静态IP 虚拟机的自启动问题 Hyper-V的安装 也不能算说是安装,如果你的win1

Swing 6918

递归与分治策略基本概念及思维导图

递归与分治策略的相关内容及思维导图

dududonut的博客 994

FPGA篮球计分器:从需求分析到模块化实现的实战指南

本文详细介绍了FPGA篮球计分器的设计与实现,涵盖需求分析、模块化设计及实战调试。重点解析了24秒精确倒计时、12分钟比赛计时、比分统计和数码管显示等核心模块的Verilog实现,提供了按键消抖、状态机设计和BCD码处理等关键技术细节,帮助开发者掌握FPGA数字系统设计方法。

sql99的博客 218

13个GNS3 3.0.5 appliances设备模板镜像合集:IOSv/L2,IOU L2/L3,以及IOS-XE

13个GNS3 appliances设备模板:IOSv/L2,IOU L2/L3,以及IOS-XE合集

haierccc的博客 1070

矩阵相乘C语言

#include int main() { int count=0; int a[3][4] = { { 2, 5, -8, 7 },{ 3, 8, 13, 2 }, { -6, 11, -2, 0 } };//3行四列 int b[4][2] = { { 22, 7 }, { -3, 16 }, { -9, 0 }, { 1, 8 } }; int c[3][2], i, j, k;

柳任远的博客 748

pe卸载win10更新补丁_禁用Win10系统更新

众所周知,最近WIN10的强制更新导致了很多问题。如:(部分专业软件系统更新后无法使用,硬件中键盘、鼠标、指纹之类的硬件,更新补丁后失灵等问题)。而之前的禁用WindowsUpdate的方法已经失效。下面我们另辟蹊径,利用系统权限的方法使Win10无法更新,达到禁用更新的目的。1.计算机管理-服务中禁用Windows Update服务。2.打开C:\Windows\softwareDistribu...

weixin_39702479的博客 1万+

计算机在执行递归算法时效率低 为什么,递归为什么那么慢?递归的改进算法...

1.所谓的递归慢到底是什么原因呢?大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回值。这势必是影响效率的。2.用循环效率会比递归效率高吗?递归与循环是两种不同的解决问...

weixin_42489252的博客 2303

058、时域降噪(Temporal Denoise):运动补偿与递归滤波在视频降噪中的应用

本文深入探讨了时域降噪(Temporal Denoise)技术在视频处理中的应用。作者通过车载环视项目案例,揭示了空域降噪的局限性,提出利用帧间信息进行降噪的核心思路。文章详细解析了递归滤波和运动补偿两大关键技术,指出递归滤波简单但易产生拖影,而运动补偿通过计算运动矢量解决此问题。作者还分享了多帧降噪方案的优势与算力挑战,并总结了噪声模型匹配、运动矢量一致性等实战调优经验。最后强调时域降噪需要与空域降噪平衡,指出调试工具的重要性,提出"在保证运动区域无鬼影的前提下追求信噪比"的实践原则,体现了算法复杂度与效

zzfmlxs的博客 92

汽车UDS诊断之诊断会话控制服务(0x10)深度剖析

DiagnosticSessionControl就是诊断会话控制。 请求消息定义 A_Data类型 参数名称 Cvt 字节值 助记符 #1 诊断会话控制请求SID M 0x10 DSC #2 子功能=[诊断会话类型] M 0x00-0xFF LEV_DS_ ...

心骗小白话的博客 7419

计算矩阵A和矩阵B的乘积

for(int i = 0; i         {             for(int j = 0; j             {                 // 初始化矩阵C                 matrixC[i,j] = 0;                 // 计算矩阵A和矩阵B的乘积,并把值存放在矩阵C中

wsc30的博客 8062

基于STM32、HAL库的IP5356M_DBZ_CA快充协议芯片简介及驱动程序设计

IP5356M_BATTERY_LEVEL_25 = 1, /* 电池电量25% */IP5356M_CHARGE_STATE_CHARGE_DONE = 4, /* 充电完成 */IP5356M_CHARGE_STATE_FAST = 2, /* 快速充电 */IP5356M_CHARGE_STATE_NONE = 0, /* 无充电 */IP5356M_CHARGE_STATE_PRE = 1, /* 预充电 *//* 延时1秒 */

corlin6688的博客 1417

韩信点兵算法

描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。 输入 输入3个非负整数a,b,c ,表示每种队形排尾的人数(a...

Liusuzhi19610221的博客 522

用MATLAB计算卡方值

然后,我们计算了期望频数,即在两个分类变量独立的情况下,每个单元格的预期频数。接下来,我们使用卡方检验的公式计算了卡方值。卡方检验是一种常用的统计方法,用于确定两个分类变量之间是否存在相关性。它基于观察到的频数和期望频数之间的差异来评估分类变量之间的独立性。在MATLAB中,我们可以使用。请注意,这只是一个简单的示例代码,用于说明如何使用MATLAB计算卡方值。在实际应用中,您可能需要根据您的具体数据和研究问题进行相应的修改和调整。在上面的代码中,我们首先创建了两个分类变量。函数显示了计算得到的卡方值。

CodeNexus的博客 2658

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

韩信点兵

韩信点兵 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。已知总人数不小于10,不超过100 。 输入 输入3个

chen_ling_16的博客 363

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

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

算法题-韩信点兵

/*请教别人写的代码,这是最简单的写法*/ #include<stdio.h> int main(void){ int i,a,b,c; scanf("%d %d %d",&a,&b,&c); for(i=10;i<=100;i++) { if((i%3==a)&&(i%5==b)&&(i%7==c)) {

woainigui8888的博客 1177

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C语言I博客作业07

这个作业属于哪个课程 https://bbs.youkuaiyun.com/forums/csuft_swxy_C?category=0&typeId=17324 这个作业要求在哪里 https://bbs.youkuaiyun.com/topics/603527008 这个作业的目标 <日常练习C语言> 学号 <20218481> 1. PTA作业 1.1 在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓...

m0_62142249的博客 470

韩信点兵计算公式与代码

韩信点兵计算公式与代码 问题描述: 淮安民间传说着一则故事——“韩信点兵”,其次有成语“韩信点兵,多多益善”。 韩信带1500名兵士打仗,战死四五百人,站3人一排,多出2人;站5人一排,多出4人;站7人一排,多出6人。韩信很快说出人数:1049。 问题重述: 上述问题使用数学语言其实可以描述如下: 假设一个数为X,则1000<X<1100(战死四五百),并且X满足以下等式: X%3 = 2 X%5 = 4 X%7 = 6 让求X。 问题解法: 其实韩信点兵问题,在古代已经有了解法。《孙子算经》有

weixin_43982422的博客 1万+

韩信点兵用计算机解决的一般过程,1.1 使用计算机解决问题的一般过程教学设计范文...

华东师大课标版《算法与程序设计》(选修)(2008年7月第1版)第1章计算机和算法1.1 使用计算机解决问题的一般过程教者:于兆鑫一、教学目标 1、知识与技能(1)让学生了解算法、穷举法、程序设计语言、编写程序和调试程序等概念。(2)让学生知道对现实问题的自然语言的描述,特别是类似程序设计语言的自然语言描述。(3)让学生理解分析问题、设计算法、编写程序、调试程序这一用计算机解决问题的基本步骤,认...

weixin_32063439的博客 679

算法竞赛入门经典习题2-3 韩信点兵

1 #include <stdio.h> 2 int main() 3 { 4 int i,a,b,c; 5 while(~scanf("%d %d %d",&a,&b,&c)) 6 { 7 i=9; 8 while(i++) 9 { ...

diansuoku1565的博客 248

韩信点兵C++算法实现

问题描述 今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?这个问题就是韩信点兵. 算法实现 #include<iostream> using namespace std; int main(){ int a,b,c; cin>>a>>b>>c; for(int i=10;i<=100;i++){ if((i-a...

Gary_123666的博客 2752

计算机初中教师资格教案,初中教师资格证教学设计

各位要参加教师资格考试的考生快来看看吧!出国留学网教师资格考试栏目为大家分享了“初中教师资格证信息技术算法描述教学设计”,希望对考生能有帮助。想了解更多关于教师资格考试的讯息,请继续关注我们网站的更新。初中教师资格证信息技术算法描述教学设计内容分析:本节课主要上让学生了解什么是算法及其特征,掌握三种描述算法的方法教学目标:知识与技能:进一步理解什么是算法,知道算法的多样性;能够对设计的算法做简装的...

weixin_29209805的博客 380

中国剩余定理(韩信点兵)

现在这网上确实东西杂,看个好点的算法都难啊         公元前后的《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”答为“23”。 --------这个就是传说中的“中国剩余定理”。      其实题目的意思就是,x%3=2,x%5=3,x%6=2;问x最小是多少?  解法:         1.首先找到3,5,7,的三个“关

purevegetable 1468

《算法竞赛入门经典(第2版)》习题2-2韩信点兵

习题2-2 韩信点兵(hanxin) #include <stdio.h> #include <math.h> int main() { int a,b,c;int G=0;//全局定义输入和输入次数计数器 while(scanf("%d%d%d",&a,&b,&c))//循环输入a,b,c {G++;//输入次数加一 ...

Themess的博客 331
上一篇: 【算法设计与分析qwl】03 问题的计算复杂度:排序问题
下一篇: 【算法设计zxd】第3章 迭代法 杨辉三角,穿越沙漠,内存移动,竖式相乘(阶乘)
羰基绳命
博客等级 码龄6年 239粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值