用游戏串起程序员的基本功-Java基础-Java-编程开发

西门子S7-1200PLC与FANUC机器人进行PROFINET IO通信的具体方法和步骤详解 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

希尔排序法基本思想是:取一个间隔,将长序列分成若干短的子序列,对每个子序列进行直插排序;然后逐渐缩小间隔,重复以上过程,直到间隔为1

前面我们学习了两种插入排序法,但当要排序的数组长度越长并且数值越不成顺序,比较和交换的次数就越多,效率越低。因此D.L.Shell在1959年提出了缩小增量排序法(又叫希尔排序法),基本思想是:取一个间隔,将长序列分成若干短的子序列,对每个子序列进行直插排序;然后逐渐缩小间隔,重复以上过程,直到间隔为1。可以看到这种算法,较好的克服了直接插入排序法的不足。

  下面是示例:

8 7 4 3 6 1 //是要排序的数值,我们以一半的长度为间隔3
3 7 4 8 6 1 //第一次,取得3,小于前面的8,交换位置
3 6 4 8 7 1 //第二次,取得6,小于前面的7,交换位置
3 6 1 8 7 4 //第三次,取得1,小于前面的4,交换位置
1 6 3 4 7 8 //第四次,再缩小间隔,为2,取得1小于3,交换位置,取得7,大于前面的3,不变;取得8大于6,不变,取得4小于8,交换位置
1 3 4 6 7 8 //第五次,再缩小间隔,为1,取得6,大于1,不变;取得3小于6,交换位置;取得4,小于6,交换位置;取得7,大于前面的6,不变;取得8 ,大于7,不变
  以下是代码:
void paixu( ) //用希尔排序法,
{
  int N=13;// N为前后纪录位置的增量
  for (int Z= N/2; Z; Z = Z/2)//每次缩小增量
   for (int i = Z; i < N; i )//从增两大小开始比较
   {
    int temp = apai[i]; //将后一个备份
    for (int j = i; j >= Z && temp < a[j - Z]; j -= Z) //与他在同一个子序列的数一个个的较
    {
     a[j] = a[j -Z]; //如果小于,就交换
    }//end for
    a[j] = temp; //找到合适的插入点,放入其中
   }//end for
}//end

  我们再来看最后一种关于数组的排序方法,就是快速排序法,它是目前最快的一种排序的方法.它的基本思想是:通过一趟排序将待排序的记录分割为独立的两部分,其中一部分记录的数值均比另一部分记录的数值小,然后继续分别对这两部分进行排序,直到整个序列有序为止.

  具体做法: 任取待排序列的某个记录(我们可以取第一个数)作为基准,按照该数值大小,将整个序列分成两个序列——左侧的所有记录的数值都比基准小(或者相等),右侧的都比基准大,基准则放在两个子序列之间,显然这时基准放在了最后应该放置的位置。分别对左右子序列重复上面的过程,直到最后所有的记录都放在相应的位置。

  示例如下:
7 8 4 3 6 1 //是要排序的数值
1 8 4 3 6 //第一次,取得7,作为基准,1为right值,7>1,交换位置
1 4 3 6 8 //第二次, 8为left值,7<8,放到最后;
1 4 3 6 8 //第三次,left取得4,小于7,放到前面,
1 4 6 3 8 //第四次,right取6,小于7,放到前面
1 4 6 3 8 //第五次,left=right=3,小于7,放到前面,
1 4 6 3 7 8 //7放入合适位置,第一趟排序完成
//后面,在以1为基准排序
……
//直到成功
  代码如下:
void paixu(int a[],int low,int high;)//用快速排序法
{
  // low, high表示扫描的范围

  int pivot;//存放中心索引及其值的局部变量
  int scanup,scandown,mid;//用于扫描的索引
  if (high-low<=0) //如果数组中的元素少于两个,则返回
   return;
  else
   if(high-low==1) //如果有两个元素,对其进行比较
   {
    if(apai[high]<apai[low]) //如果后一个比前一个小,
     Swap(apai[low],apai[high]);//那么交换位置
     return;
   }//end if
  mid=(low high)/2;//取得中心索引
  pivot=apai[mid];//将中间索引的值,赋给pivot
  Swap(apai[mid],apai[low]);//交换pivot及低端元素的值
  Scanup=low 1;
  Scandown=high;//初始化扫描索引scanup和scandown
  do{
   //从低端子表向上扫描,当scanup进入高端子表或遇到大于pivot的元素时结束.
   while(scanup<=scandown && apai[scanup]<=pivot)
    scanup ;
    //从高端子表向下扫描,当scandown遇到小于或等于pivot的元素时结束
   while(piovt<apai[scandown])
    scandown--;
    //如果两个索引还在各自的子表中,则表示两个元素错位,将两个元素换位
    if(scanup<scandown)
     Swap(apai[scanup],apai[scandown]);
  }while(scanup<scandown);
  //将pivot拷贝到scandown位置,分开两个子表
  apai[low]=apai[scandown];
   apai[scandown]=pivot;
  //如果低端子表(low至scandown-1)有2个或更多个元素,则进行递归调用
  if(low<scandown-1)
   paixu(apai,low,scandown-1);
   //如果高端子表(scandown 1至high) 有2个或更多个元素,则进行递归调用
  if(scandown 1<high)
   paixu(apai, scandown 1, high);
}
  关于排序的问题已经够多了,就到这里吧,如果大家有兴趣,可以看已看这方面的书.

RAGFlow升级指南(纯小白都看得懂) 升级背景:RAGFlow项目原来的版本是0.17.0版本,在使用过程中,发现当知识库检索为空的时候并且使用到rerank模型的时候,就会输出错误的信息;为了解决这个版本问题,特意升级到最新的版本0.17.2(截止2025-3-14时最新版本就是0.17.2了)官方升级文档https://ragflow.io/docs/dev/upgrade_ragflow官方文档对小白还是不太友好,作者也是捣鼓了十多分钟,特出下面的升级指南前提:旧版本的RAGFlow项目是启动好了的1.在ragflow目录下执行(拉取最新 阅读详情

相关推荐

科研指南:IEEE期刊LaTeX/Word模板下载与使用全解析

本文详细解析了IEEE期刊LaTeX/Word模板的下载与使用技巧,帮助科研人员高效完成论文排版。从官方模板获取入口到LaTeX文档结构配置,再到Word样式管理与常见问题解决方案,全面覆盖投稿准备的关键步骤。特别针对数学公式、参考文献和图片处理等难点提供实用建议,助力学术写作规范化。

weixin_28396629的博客 567

operator<<

一、重载流输出运算符<< 重载流输出运算符<<,比如cout<<a;原来的形式是 operator<<(cout,a); 由于<<需要用到两个类,一个是ostream类,cout就是他的对象,是负责输出的类;另一个是用户自定义类。...

ciddk2085的博客 1826

迈创cameralink采集卡安装操作说明

迈创cameralink采集卡安装操作说明MIL软件安装MIL软件下载获取MIL软件安装MIL软件安装常见问题 MIL软件安装 MIL软件下载获取 MIL软件安装 解压MIL安装包,点击MilSetup.exe开始安装,如下图所示; 备注:64位系统MIL软件可以同时安装32位和64位客户端,本文档默认安装64位客户端,64位系统安装32位MIL方法后续再展开讲(不建议这样用,很麻烦) 点击Launch Installation开始安装,64位系统,默认只安装64位MIL客户端 根据采集卡驱动,选择M

qq_23107577的博客 9354

DIY一个C++ traits来判断enum是否有用户自定义的operator<<

前段时间发现自己的String库中有个bug: String& operator+=(int); String& operator+=(unsigned); // 所有的整型、浮点型都有一个operator+=的重载 template String& operator+=(const T& t) { std::stringstream ss; ss << t;

tossgoer的专栏 1253

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 337

TSMaster二次开发实战:如何用Python搞定CAN/CANFD事件回调(附完整代码)

本文详细介绍了如何利用Python进行TSMaster二次开发,实现CAN/CANFD事件回调功能。通过实战代码演示,讲解了预发送与后处理回调的核心区别、注册流程、资源管理及性能优化技巧,帮助工程师高效构建自动化测试与数据监控应用。

star的博客 669

关于运算符"operator<<"重载出错解决方法

问题描述:在类定义的公有函数中,定义友元函数“operator<<”,在编译的时候提示“类成员是私有的,无法访问”。

飘零过客 1640

时序定江山,功耗写风骨——解读时序库lib文件的奥义【芯片设计 lib文件】

lib库,全称liberty library format file:它是Liberty时序文件的简称,使用 Liberty 语法来编写。它可以通过library compiler/dc转换成.db文件(database),供synopsis家的DC和PT使用,也可以通过spyglass的library compiler来生成sglib文件,供spyglass使用。他们是等价的,但db文件是二进制格式,人类不可读。

LogicYarn的博客 2603

c++求operator<<的例子

我估计是要重载流输出运算符<<,比如cout<<a;原来的形式是 operator<<(cout,a); 由于<<需要用到两个类,一个是ostream类,cout就是他的对象,是负责输出的类;另一个是用户自定义类。 所以重载是应该用 友元函数 ...

131

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

Vins-Fusion 外参camera-imu 标定

Vins-Fusion是一种基于优化的多传感器状态估计器,一大特色是支持实时camera-imu外参校准(相机和IMU之间的旋转)。Vins-Fusion 外参camera-imu校准是利用两帧间计算相机位姿和imu预积分得到位姿,构建最小二乘问题,并通过SVD求解camera-imu外参旋转矩阵。

u010196944的博客 2490

C++operator<<函数

让 class point{ public: int x; private: int y; public: point(int x,int y){this->x=x;this->y=y;} point(){x=0;y=0;} point &operator=(const point &other){ this->x=other.x; this->y=other.y; ret

joan11_3的专栏 4824

GitHub 国内加速完全指南(最新):镜像、代理与优化技巧

在国内使用 GitHub 时,经常遇到 clone 慢、打开仓库卡、GitHub Actions 不稳定 等问题。下面是整理好的 GitHub 国内镜像和加速方法大全,高效使用 GitHub。

moton2017的博客 1万+

重载operator<<操作符—friend ostream& operator<<(ostream&,const Date&);

利用friend友元函数对操作符 #include using namespace std; class Date { friend ostream& operator<<(ostream&,const Date&); int year; int month; int day; public: Date() {year=2013; month=

小伟锅的博客 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

operator<<的重载,一个例子

使用C++的版本class Person{public: Person(string name, string sex, string age): _name(name), _sex(sex), _age(age){} string getName()const {return _name;} string getSex()const {return _sex;} string getAge()c

todototry的专栏 1048

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C++中operator<<调用顺序问题

今天发现一个奇怪的问题,有一个函数,该函数会记录原来的状态,调用一次以后,下次调用就会使用原来的结果,从而提高性能,假如函数是这样的 int GetValue(bool update=false); 如果update=true则更新其值,否则不更新.在测试时我这样输

人生如旅 1249

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

写友元函数时出现的错误--- 1 IntelliSense: class "point" 没有成员 "operator<<"

错误代码如下: #ifndef _Point_h_ #define _Point_h_ #include "stdafx.h" #include using namespace std; class point { public: point(double m,double n); ~point(){}; point& operator ++();

fn0723的博客 1931

fstream, operator<<, operator>>

平时在读写文件时,我习惯了WIN32和C函数,今天试着用C++的风格来处理了一下。 注意operator<<和operator>>中被我注释掉的代码,因为os<<user.name<<user.age输出到文件后会连在一起(例如shadow20),之后读取时会全部作为字符串(可以在它们之间加个空格避免这个问题,不过我感觉这有点那啥)。所以我就使用了...

weixin_30398227的博客 216

operator<<友元类的类外定义

#include #include using namespace std; class Rectangle { public: Rectangle(){} Rectangle(float l1,float r1,float l2,float r2):left1(l1),right1(r1),left2(l2),right2(r2){} void input(){cin>>left

u013718162的专栏 559

cout 堆栈,operator<< 运算符重载输出问题

在C++中cout的输出流当中,有一些问题很容易出错,就比如下面这道简单程序,看似简单,但却是一个值得深思的问题~~ #include using namespace std; int foo(int &x) {            cout            return ++x; } int main() {           int i = 1;

Epic丶玖遇 1622

C++中operator<<运算符重载注意事项

我们在定义一个类的时候,为了使用方便,希望通过<<打印类的相关信息,需要重载<<运算符一般运算符重载都设计为类的member function,但是operator<<却不能这样设计,Essential C++中解释如下: 为什么不把output运算符设计为一个member function呢?因为作为一个member function,其左侧操作数必须是隶属同一个class之下的对象,如果ou

GVFDBDF的专栏 3794

C++基础---string类的operator<</operator>>/getline

1. string中operator<< /operator>> /getline 1.1 std::operator<< (string) 原型: ostream& operator<< (ostream& os, const string& str); 说明: 用于输出操作,将字符串插入流。 代码示例: #include <iostream> #include <string> using name

Catherine的笔记 1016

从operator<<谈函数重载决议

一. 背景 项目中需要对数据库查询访问的业务,在写数据库sql语句代码时,由于没有特别复杂的格式化需求,决定采用C++标准库中的stream来进行sql语句的格式化。有两点好处: 1). 类型安全 2). 使用方便 比如 std::ostringstream os; std::uint32_t id = 10; os "select * from user_t where id

郁郁 2080

为什么operator<<运算符重载一定要为友元函数

一、 为什么operator&lt;&lt;运算符重载一定要为友元函数呢? 如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。而 &gt;&gt;  或&lt;&lt; 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。。。。。。就只能申明为友元函数了。。。 如果一定要声明为成员函数,只能成为如下的形式:...

creator123123的博客 766
上一篇: Java Servlet 编程及应用之二-Java基础-Java-编程开发
下一篇: Java Applet 编程技巧实例专辑-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值