自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

马小超

志在四方 道阻且长

  • 博客(216)
  • 资源 (2)
  • 收藏
  • 关注

原创 浅显理解std::vector< bool >

std::vector<bool> 的全称是 std::vector<bool, std::allocator<bool>>,最初传入的分配器是std::allocator<bool>,是为bool类型变量分配内存的。但由STL对bool类型做了特化,内部并不是存储bool类型,而是_Bit_type类型,因此 std::allocator 现在需要为_Bit_type类型分配内存,这就需要通过 rebind 函数来获得 std::allocator<_Bit_type>。

2023-10-07 10:42:49 328

原创 进出容器会调用对象的拷贝和析构

而当这个对象出容器时,容器认为此 对象没有用处,会调用其析构函数。一个对象放入容器,调用了其拷贝构造函数,生成了一份新的;所以,当你拿引用去接收一个容器内的东西,用完之后再出容器。不然会segmentation fault。

2022-09-22 15:59:36 310 1

原创 C++11新特性:lambda表达式

Lamda表达式C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。一个完整的 Lambda 表达式如下:[=] (int x, int y) mutable -> int { int z = x + y; return z; }[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数](操作符重载函数参数)mut

2021-10-13 10:34:54 730

原创 AVL树的平衡操作

确定状态平衡因子: 右子树的高度减去左子树的高度最简单的情况:失衡的点称之为parent,再看左右子树是谁失衡,如果左子树不是0,则是L,再接着往下看,LL,对于LL型,一次右旋就可以平衡,并且旋转的是parent和subL对于RR型,一次左旋就可以平衡,并且旋转的是parent和subR对于LR型和RL型,一次旋转不够LR型:先对subL和subR左旋,转化为LL型,再右旋RL型:先对subR和subL右旋,转化为RR型,再左旋...

2021-08-23 21:03:08 317

原创 C++11新特性列表初始化

在我们实际编程中,我们经常会碰到变量初始化的问题,对于不同的变量初始化的手段多种多样,比如说对于一个数组我们可以使用 int arr[] = {1,2,3}的方式初始化,又比如对于一个简单的结构体:struct A{ int x; int y;}a={1,2};这些不同的初始化方法都有各自的适用范围和作用,且对于类来说不能用这种初始化的方法,最主要的是没有一种可以通用的初始化方法适用所有的场景,因此C++11中为了统一初始化方式,提出了列表初始化(list-initializati...

2021-08-20 10:26:06 347

原创 怎样牢牢记住指针常量和常量指针的区别【const int *和int const*和int* const】

const int *int const*int* const这三个具有很大的迷惑性,怎么区分他们呢?为了方便,我们假设有指针p,const int *pint const*pint* const p区分这三种的方法就是 只看const 和 * 和指针的名字,不看数据类型 int!第一个和第二种情况:const 的右边是 *p ,*p 是指针指向的值, 也就是说const 修饰的是这个指针指向的值,所以表达的意思就是 此指针指向的值 要看做一个常量,那么就无法通过指针

2021-08-12 15:10:36 179

原创 最简练写法实现归并排序【C++代码】

目录归并排序C++代码实现稳定性分析求逆序对归并排序归并排序的思想是分治。其过程也就是“分”和“治”的两个步骤。对于一个序列,我们先将其一分为二,分别排好序,然后再合并这两个有序数列。对于被平分成的两部分怎么排序呢?再一分为二,递归下去,直至分成单个元素时,即自然有序了。C++代码实现网上很多代码会把归并排序的分和治两个环节分开写,这样可能好理解,但是函数太多了,冗余。我更习惯将其合并起来写,看起来更简洁。int t[50005]; //用于暂时存放合并

2021-01-25 01:01:53 2017 1

原创 C++STL中链表list的底层实现和常用操作

STL其他内容解析:关于C++中STL的理解和应用目录List概述List的节点List的迭代器List的常用函数List概述List和Vector都是STL的顺序容器,唯一不同的地方就在于:Vector是一段连续的内存空间,List则是一段不连续的内存空间,相比于Vector来说,List在每次插入和删除的时候,只需要配置或释放一个元素空间,对于任何位置的插入和删除操作,List永远能做到常数时间。但是,List由于不连续的内存空间,导致不支持随机寻址,所以尺有所.

2021-01-23 19:46:44 1047

原创 计算机中基本数据类型的存储结构(unsinged为什么不能修饰double?)

目录二进制整数的存储有符号数无符号数计算机以补码来存储整数浮点数的存储尾数的规整化移码存储结构字符型的ASCLL码表示修饰符unsinged二进制计算机中的数据都是以二进制补码形式存储的。为什么是二进制不是八进制十进制呢?因为二进制在现实世界可以用电器元件很容易的实现,并且受磁场等干扰最小。计算机最底层是用电来控制电子元器件以此表达二进制,电器元件的高电平和低电平分别对应二进制的1和0。1个元器件表示的一位二进制称为1比特(Bit)或1位,8个

2021-01-22 18:50:03 1895

原创 C++中的转义字符(字符串中反斜杠\的特殊性)

转义字符的作用今天在处理字符串的时候,遇见了平时在字符串中并不常见的字符---反斜杠\ 。与反斜杠搭配的一些特殊字符称为转义字符,转义字符可以表示特殊的意义,或者表示不容易表示的字符。比如说我们想定义一个带有双引号的字符串 s="abc";s="abc" 这样s输出是没有双引号的。 s=" "abc" " 这样连编译都不通过出现这个问题的原因是双引号原本就是表示字符串的边界的,所以处理起来格外棘手。有了转义字符,直接在双引号前加上\, \" 就是一个表示双引号的转义字符,问题一下子.

2021-01-21 16:35:37 25352 1

原创 C++中inline内联函数和宏之间的区别

inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点。1.为什么要引入内联函数(内联函数的作用)用它替代宏定义,消除宏定义的缺点。宏定义使用预处理器实现,做一些简单的字符替换,因此不能进行参数有效性的检测。另外它的返回值不能被强制转换为可转换的合适类型,且C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作。2.inline相比宏定义有哪些优越处(1)inline函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销效率很高;...

2021-01-20 10:22:52 270

原创 linux下修改只读文件如/etc/ld.so.conf

用gedit打开修改后是无法保存的,因为只有只读权限。所以需要用vi或者vim进行修改。下面以修改文件 /etc/ld.so.conf 为例说明具体过程:首先在终端输入命令:sudo vim /etc/ld.so.conf再输入密码,即可进入vim。进入后vim的默认模式是命令模式。输入i 进入编辑模式。现在就可以像用txt一样使用键盘任意输入和修改文件内容了。修改完毕后,需要先回到命令模式,也就是按下ESC。在命令模式下输入英文冒号 “ : ”...

2021-01-02 17:59:47 8501 1

原创 vi和vim介绍和使用方法

vi和vim简介所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是 vim 编辑器。Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。vi/vim

2021-01-02 17:42:10 606

原创 双指针法及题目总结

最近,碰到了一个这样的题目,也用到了双指针的思想。有N种午饭和M种晚饭,每种饭都有热量值X和美味值Y,并且每顿饭最多吃一种,问在美味值之和不小于T的情况下,最少的热量摄入X。原题是拼多多秋招第三题:https://blog.csdn.net/qq_21989927/article/details/107751197如果饭A的热量值大于B的热量值,并且A的美味值小于B的美味值,那么这个饭A是肯定没有用的,所以我们可以直接不考虑饭A,所以排序完成后,应该是x和y都在递增的情况。至此,再...

2020-12-26 00:23:48 313

原创 前缀和与差分、二维前缀和

前缀和题目:有n个数,并且有m次操作,每一次操作要求查询第x个数到第y个数的和。前缀和是一种动态规划的思想,假如有数组 a[i] 。定义 sum[i] 表示从 1 到 a[i] 的和。状态转移方程则是: sum[i] = sum[i-1] + a[i] ; 其中 sum[1] = a[1] ;这样可以在O(n)的时间计算出整个数组的前缀和。查询 a[x...y] = sum[y] - sum[x-1] ;差分差分:我们定义 f[i] 表示 a[i] 与 ...

2020-12-24 16:01:11 157 1

原创 牛客S2第12场:音符共鸣

链接:https://ac.nowcoder.com/acm/contest/10324/C来源:牛客网题目描述现在有n个音符和m对共鸣关系,编号为1~n,每个音符自己有一个奏响时的优美程度,共鸣关系(x,y,z)表示音符x和y同时奏响的额外优美程度是z,同时不奏响则为-z,其他情况为0。音符可以选择奏响或者不奏响,不奏响的音符没有优美程度。我们想知道最大的优美程度和是多少,我们不需要知道具体是哪些音符被奏响了,只需输出最大和即可。共鸣关系可能有重复,其共鸣效果也会重复叠加。数据包括两

2020-12-23 22:42:38 136

原创 K 个一组翻转链表 【LeetCode 25】

题目描述给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。分析这个题的思路很简单,就是模拟。翻转链表我们都知道,这个题加了一个条件,K个一组。这就带来了一些额外需要考虑的问题:怎么限制只翻转K个?可以计数(s<k),也可以使用指针判断(t!=tail)。K个一组翻转完毕后,怎么和前后的部分连接起来?翻转之前这K个的头指针就是翻转之后的尾指...

2020-12-23 18:56:55 106

原创 C++ pair的基本用法

pair的应用pair可以将2个数据组合成一组数据,当有这样的需求时就可以使用pair。如STL中的map就是将key和value放在一起来保存;当一个函数需要返回2个数据的时候,也可以选择pair。pair的实现pair的本质是一个结构体struct,主要的两个成员变量是first、second。其标准库类型--pair类型定义在#include <utility>头文件中,定义如下:类模板:template<class T1,class T2> struc

2020-12-23 17:12:06 572

原创 腾讯2020一面后端开发岗

进程的通信方式消息队列的底层结构?TCP的拥塞控制进程线程项目epoll select 同步异步日志 LT ET编程题将单链表的每K个节点之间逆序给定一个单链表,实现一个调整单链表的函数,使得每 K 个节点之间的值逆序,如果最后不够 K 个节点一组,则不调整最后几个节点。输入描述第一行一个整数 n,n 表示单链表的节点数量。第二行 n 个整数 val 表示链表的各个节点的值。第三行一个整数 K。输出描述在给定的函数内返回链表的头指针。示例1输入51.

2020-12-21 23:14:27 386

原创 计算机网络知识串联:使用浏览器访问一个网址的过程解析

在浏览器中输入https://www.baidu.com后会发生什么?步骤如下:系统自动在本地寻找hosts文件,该文件在Sysem32/etc下,如果该文件中已经记录该域名对应的IP地址则直接访问IP,没有的话执行域名解析。域名解析,请求配置的DNS服务器,经过DNS服务器解析后获得一个目标IP地址。 准备访问目标IP,通过80号端口和按照Http协议生产一个报文。 访问IP,从上层的应用层已经生成的报文到传输层,网络层,物理层,层层装包生成最终报文,最后将数据发送出去。 寻找路由,从默..

2020-12-21 16:55:40 1067

原创 用new创建二维数组不可以直接memset

用new创建二维数组不可以直接memsetmemset可以将数组初始化,不管是一维数组还是二维数组。但是其前提是数组空间必须是连续的。new一次出的空间是连续的,但是多次new出的空间不一定是连续的,所以不能直接使用memset初始化。看如下例子:#include<iostream>using namespace std;int main(){ int n=5; int m=10; //new申请二维数组 int** a=NULL; a=new int* [n]

2020-12-21 15:45:15 581

原创 C++的this指针【定义、用法、本质、特点】

一、this指针的定义及用法我们知道在C++中成员变量和成员函数是分开存储的,每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。那么问题是:这一块代码是如何区分哪个对象调用自己的呢?C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象this指针是隐含每一个非静态成员函数内的一种指针,this指针不需要定义,直接使用即可。this指针的用途:当形参和成员变量同名时,可用this指针来区分 在类的非静态成

2020-12-21 15:02:44 14803 5

原创 编程规范简述【内存、指针、字符串等】

目录1 内存管理规范1:【内存使用必须遵循谁申请谁释放原则】规范2:【内存释放函数和该内存的申请函数必须配套使用】规范3:【申请内存后必须要先判断内存有效性】规范4:【内存拷贝前必须进行长度有效性判断,避免内存越界】规范5:【禁止引用已经释放的内存空间】2指针管理规范6:【指针使用前必须进行有效性判定,避免使用空指针】规范7:【指针内存释放后,对应指针必须置空】规范8:【释放结构体/数组/各类数据容器指针前,必须先释放成员指针】3变量、宏规范9:【严禁使用..

2020-12-20 15:25:30 571 1

原创 对象类型的数组的内存空间怎么分配,会调用几次构造函数?

有这样一个题目;class A{ public: A(){ cout<<"*"; }}; 类A的定义如代码所示,问执行 A b[3]; 输出结果是什么。运行发现,结果为 ***。 也就是说,执行了3次构造函数。由此可知,当数组类型为类时,每个数组元素都会调用一次构造函数。...

2020-12-19 15:55:24 1922 1

原创 浪潮2020笔试【搬石头,01串】

T1:搬石头题目描述沙滩按照线型摆放着n个大小不一的球形石头,已知第i个石头的半径为ri,且不存在两个石头有相同的半径。为了使石头的摆放更加美观,现要求摆放的石头的半径从左往右依次递增。因此,需要对一些石头进行移动,每次操作可以选择一个石头,并把它放在剩下n-1个石头在最左边或最右边。问最少需要操作多少次才能将这n个石头的半径变成升序?输入描述第一行一个整数n,表示石头的个数。(1 <= n <= 100000)第二行n个整数,表示从左往右石头的半径r1,r2,...,rn。(1

2020-12-18 18:31:15 1711 1

原创 最长上升子序列 LIS【DP的O(n^2)及贪心+二分的O(nlogn)解法】

最长上升子序列给你一个长度为N的序列,求其最长上升子序列的长度。样例输入: 6 1 6 2 4 3 5样例输出: 4解释:其最长上升子序列的长度为4。可以是{1 2 4 5 }或者{1 2 3 5}注意:子序列是不连续的。假设我们把序列储存在a数组中,并且从下标1开始存储。动态规划解法定义 f[i] 表示到a[i] 为止的最长上升子序列的长度。(其中a[i]必须被选中,必须以a[i]结尾)所以动态转移方程是 f [ ...

2020-12-18 18:18:07 118 1

原创 怎么理解C++多态的“父类指针或引用指向子类对象”?

动态多态动态多态的实现是通过子类重写父类的虚函数实现的。动态多态需要满足的条件:有继承关系 子类重写父类中的虚函数动态多态的使用方法:父类指针或引用指向子类对象假设我们现在有如下的类,其中Animal为基类,Cat和Dog都是其派生类。class Animal{public: virtual void speak(){ cout << "动物在说话" << endl; }}; class Cat :public Animal{pub.

2020-12-15 18:19:36 17852 7

原创 手动实现类中的默认函数【构造函数,析构函数,复制构造函数、赋值操作符重载】

类中的默认函数假设我们现在有如下一个学生类。string类型的名字变量 int类型的年龄 int类型的科目数量 指针类型的成绩 还有一个成员函数show(),可以输出这个学生的基本信息。class stu{public: void show(); //输出学生的基本信息private: string name; //姓名 int age; //年龄 int num; //科目数量 int *src; //num科的成绩分别为src[i]};v..

2020-12-15 01:15:46 286

原创 C++和C的程序互相调用要使用 extern “C“

函数重载C语言中,函数是不允许重载的,而在C++中,函数可以重载。这也是为什么C和C++函数编译方式不同的原因。例如,假设某个函数的原型为:void foo( int x, int y );该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字_foo_int_int 这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。例如,在C++中,函数void foo( int x, int y )与void foo

2020-12-13 23:06:01 335

原创 面试中常问的strcpy()函数相关【溢出、手写、返回值】

目录标准库函数中的strcpy()源码strcpy()的用法strcpy()的问题缓冲区溢出问题内存重叠问题总结手写实现strcpy()strcpy()为什么返回指针?函数strncpy()标准库函数中的strcpy()源码strcpy是一种C语言的标准库函数。strcpy是string copy 字符串复制的缩写。char *strcpy(char *strDest, const char *strSrc)简单的理解:源字符串strSrc的内容复制给目标字符串

2020-12-11 20:54:01 1494

原创 虚函数和纯虚函数的比较

虚函数: virtual void speak(){ cout << "动物在说话" << endl; }在类的成员函数前面加上virtual关键字,就构成了虚函数。子类通过重写基类的虚函数来实现多态。纯虚函数:virtual void speak()=0;在虚函数的形参后面写上=0,则虚函数变为纯虚函数,纯虚函数不需要实现,包含纯虚函数的类叫抽象类(也叫接口类),抽象类不能实例化对象。子类必须重写基类中的纯虚函数才能实例化出对象。...

2020-12-11 02:18:31 361

原创 数据库MySQL的常用命令

查看数据库文件的存放位置:show global variables like "%datadir%" ;create database new_dbname;--新建数据库drop database old_dbnane; --删除数据库show databases;--显示数据库use databasename;--使用数据库select database();--查看已选择的数据库 show tables;--显示当前库的所有表create table tablename(fiel

2020-12-11 02:15:50 181

原创 IP地址分类及子网划分

IP地址分类不同的网络【网段】传递数据需要 通过路由器 同一网络【网段】传递数据 只需要通过交换机IP地址=网络号+主机号。网络号:用于识别主机所在的网络; 主机号:用于识别该网络中的主机。IP地址分为A,B,C,D,E五类。其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。(D类用于组播,E类用于实验)A类A类地址前8位为网络标识。后24位为主机标识。:A类网段计算:根据规定,A类地址的网络标识必须以“0”开头。那么其网段数应该为0X

2020-12-11 02:13:27 2055

原创 一个题目:const char *P1=“hello“; char *const P2=“world“;下列操作合法的是

题目给出以下定义const char *P1="hello"; char *const P2="world";以下哪些操作是合法的?P1++; P1[2]='W'; P2++; P2[2]='1';分析P1和P2都是字符指针,所以字符串"hello"和"world"都是字符串常量,不能修改,所以操作2 4都不合法。P2是指针常量,也就是说P2的地址是不能修改的,操作3:P2++不合法。P1是常量指针,指针指向的内容是常量,不能通过其修改,但是指针本身可以修改,P1++合.

2020-12-10 22:59:59 1577

原创 从内存层面看char *p和char p[]的区别

char p[]="hello":p[]是一个字符串数组,编译器在栈上给p[]分配6字节的空间,6字节中依次存储'h','e','l','l','o','\0'。 但不存在p指针本身的存储。p是一个数组内存块的名字。 字符串是可以修改的。char *p="hello" :p是指向一个常量字符串的指针 ,编译器在栈上给p分配4字节(如果是32位),而字符串"hello"存放在静态存储区。 字符串是不能修改的。下面的例子:#include<iostream>using...

2020-12-10 22:51:35 487

原创 C++兼容C语言的遗留问题探讨:char *p=“hello“;

在C++中,char *p="hello"; 这种写法是否正确呢?我们测试下,如下所示代码: char *p1="hello"; cout<<p1<<endl; cout<<(void *)p1<<endl;编译、运行代码,结果如图:p1输出为hello,p1的地址为0x488001,看起来这个代码没什么问题。警告:虽然代码可以执行,但是值得注意的是,此时编译器给出了一个警告:[Warning] deprecated ..

2020-12-10 22:01:05 1684

原创 class类的大小计算【空类,虚函数类,继承】

1、类的大小首先必须先了解class的对齐问题,class和struct的对齐规则一样 :struct的用法和struct的对齐原则这里我们所说的类的大小,也就是类的空间占用,所以类的大小和该类对象的大小始终都是一致的。那么哪些因素可以影响类的大小,哪些是无关紧要的因素呢?有关的因素:普通成员变量:在实例对象中存在,需要注意对齐问题。 虚函数:有虚函数的类就会有虚函数表,类的每个实例对象都有一个vptr指针指向虚函数表。 继承(单一继承,多重继承,重复继承,虚拟继承):子类会继承父类的

2020-12-09 21:23:45 806 2

原创 哪些函数不可以成为虚函数?构造函数和析构函数可以是虚函数吗?

哪些函数不能成为虚函数?普通函数:普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。 构造函数:只有当调用了构造函数,这个对象才能产生,如果把构造函数写成虚函数,这时候我们的对象就没有办法生成。更别说用对象去调用了。所以构造函数不能成为虚函数。 静态成员函数:静态成员函数是属于类的,不依赖于对象调用,所以也不能成为虚函数。 友元函数:友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。 内联

2020-12-09 20:11:53 967

原创 红黑树删除操作的各种情况分析

目录删除情况具体分析1. 删除的节点没有子节点的情况2. 删除的节点只有一个子节点时3. 如果删除节点有两个子节点时红黑树删除平衡情况分析红黑书的删除本质上是一个穷举的过程。删除情况具体分析1. 删除的节点没有子节点的情况 a、如果为红色,直接删除即可,不会影响黑色节点的数量  删除红色节点(13)示例(不影响黑色节点数量,不需要平衡操作) b、如果为黑色,删除的时候需要进行平衡操作  删除示例,删除节点11(平衡操作后面会介绍到)2. 删除的节点只有一个子..

2020-12-07 22:17:13 1261 2

原创 红黑树插入操作的各种情况分析

目录1. 被插入的节点是根节点。2. 被插入的节点的父节点是黑色。3. 被插入的节点的父节点是红色。 3.1 叔叔结点为红色 3.2 插入结点的父结点p是祖父结点pp的左子结点,插入结点的叔叔结点s不存在或为黑色 3.2.1 插入结点是父结点p的左子结点 3.2.2 插入结点是父结点p的右子结点 3.3 插入结点的父结点p是祖父结点pp的右子结点,插入结点的叔叔结点s不存在或为黑色 3.3.1插入结点是父结点p的右子结点 3.3.2插入...

2020-12-07 22:07:47 921 3

dynamic-programming.pdf

基于状态压缩的动态规划问题是一类以集合信息为状态且状态总数为指数 级的特殊的动态规划问题.在状态压缩的基础上,有一类问题的状态中必须要记 录若干个元素的连通情况,我们称这样的问题为基于连通性状态压缩的动态规划 问题,本文着重对这类问题的解法及优化进行探讨和研究。

2020-08-07

cantor展开(pascal语言)

利用公式编程求出一个序列在全排列中的编号 X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[2]*1!+a[1]*0!

2014-10-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除