- 博客(106)
- 收藏
- 关注
原创 常见排序算法的实现(插入排序, 希尔排序, 选择排序, 堆排序, 冒泡排序, 快排, 归并排序, 计数排序)
常见排序算法的实现#include "stack.h"#include "queue.h"#include <malloc.h>void Swap(int* array, int i, int j){ int tmp = array[i]; array[i] = array[j]; array[j] = tmp; }// 1. 插入排序:// 在已经排序的序列中找一个合适的位置, 插入新的元素,插入后保证序列仍然有序// 时间复杂度: 最坏:O(N^2) 最好(
2020-08-21 08:07:34 304
原创 线程安全(互斥锁)
线程安全 (这些接口都是C库实现的) 黄牛抢票(黄牛---线程, 票 --- 临界资源) 两个黄牛抢到同一张票, 1. 线程安全指的是多个线程同时运行访问临界资源, 不会导致程序的结果产生二义性, 临界资源: 在同一时刻, 该资源只能被一个执行流所访问, 涉及临界资源的区域 --> 临界区 访问: 在临界区当中对临界资源进行非原子操作,意味着可以被打断 (原子操作是一步完成的,当前操作只有两个结果, 要不完成, 要不未开始) .
2020-08-20 10:09:50 291
原创 线程原理, 线程控制(线程创建, 线程终止, 线程等待, 线程分离)
什么是线程???在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,本质是在进程地址空间内运行;在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流线程的优点创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比,线程之间的切换需要操作系统做的工作要少很多线程占
2020-08-20 09:58:16 288
原创 信号量 , 进程信号( 产生, 注册, 注销, 捕捉, 自定义信号处理方式, 处理, 阻塞, 重入 )
1. 信号量信号量: system V版本信号量:(并不能支持跨平台) 1. 本质: 是一个计数器(保存资源数量) + PCB等待队列(存放被阻塞的进程的PCB) 两个进程都想去访问临界资源(共享内存当中保存了一个变量shm_cout = 10), 一旦涉及 到修改变量shm_cout, 容易造成数据二义, 要访问依赖CPU, 帮我们进程A和进程B计算, A拿 着CPU去计算,先从共享内存读出变量的值, 放到寄存器当中, 寄存器 = 10, 想
2020-08-19 12:19:42 447
原创 子查询,多列查询,合并查询,内外连接,索引,事务管理,用户管理
1. 子查询 a. 单行子查询: 子查询当中只返回了单列,单行的数据 b. 多行子查询: 子查询当中返回了单列多行的数据, 两个表的结果如果不在where后面加上约束条件会形成 "笛卡尔积"; c. 多列子查询: 子查询当中返回多列数据 使用方式: 只需要在where语句后面使用"(a列,b列) = (子查询语句)"将多个列的名称括起来 查询和SMITH的部门和岗位完全相同的所有雇员 1. 先查询部门和岗位 Select deptno, job from where ename=”
2020-08-17 09:44:47 215
原创 聚合函数,mysql内置函数,字符串函数,多表查询
删除表中的数据 语法:delete from [表的名称] where子句; 如果不加上where子句, 表示删除整张表当中的数据; 但是不会对表结构造成影响; 如果有自增长的属性, 不会进行清空.截断表: 注意: 不能针对某一行的数据进行操作, 而是针对整个表的数据进行操作的; 重置auto_increment项 语法: truncate table [表的名称];聚合函数: COUNT函数: 查询表当中数据的个数 select COUNT(*) from exam_resu
2020-08-17 00:09:52 128
原创 表的约束和增删查改
表的约束: 定义一个字段的时候: [字段名称 + 字段的类型], 表的约束是在约束插入数据的时候, 每一个字段的条件: 1. 空属性: NULL(可以为NULL) & NOT NULL(不可以为NULL) 表示当前字段值是否可以为NULL 2. 默认值: 给定义默认属性字段插入数据的时候, 当我们没有插入数据的时候, mysql会自动加上定义的默认值. 3. 列描述: 对字段的内容并没有约束, 而是相当于每一个字段的注释信息(log信息) 4. zerofile: 约束了数据的宽度,
2020-08-11 00:04:54 146
原创 指针和引用 , 指针空值nullptr
引用和指针1. 引用概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间, 使用方式和普通变量相同, 当原变量来对待 。比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。底层实现: 通过指针来实现,2. 形式: 类型+& + 新名称 = 新值void test(){ int a = 10; int b = -1; // ra引用, 是变量a的别名, a所代表的空间有两个名字, 代表还是原变量本身 int
2020-08-08 12:49:01 642 1
原创 内联函数 , auto关键字, 基于范围的for循环
1. 内联函数:形式: inline + 普通函数定义概念: 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销, 内联函数提升程序运行的效率。特性:inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内联函数。inline对于编译器而言只是一个建议,编译器会自动优化,如果定义为inline的函数体内有循环/递归等等,编译器优化时会忽略掉内联。inline不建议声明和定义分离,分离会导致
2020-08-08 10:45:38 339
原创 字符类型, 日期和时间类型, 表和字段的约束(主键/外键, 自增长, zerofill)
1. 字符类型 1.1 固定长度的字符串 char(L): L不是占用字节的大小, 而是字符串的长度; 字符占用字节的数量和数据库的编码格式息息相关; char(10): 10 * 类型所用的字节 LATIN1: 一个字符占用1个字节 utf8: 一个字符占用3个字节 eg: char(4): 4 * 3 = 12字节 --utf8字符集 1.2 varchar(L): 可变长度的字符串. L表字符长度, 到底可以存储多少个字符和数据库的编码格式息息相关, 可变意思是在小于固
2020-08-07 23:18:17 981
原创 命名空间,缺省参数,函数重载
1. 命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。//1. 普通的命名空间namespace N1{// N1为命名空间的名称 // 命名空间中的内容,既可以定义变量,也可以定义函数 int a; int Add(int left, int right){ return left + right
2020-08-06 18:01:40 137
原创 管道(匿名管道, 命名管道)和共享内存
管道每个进程都拥有自己的独立的虚拟地址空间和页表结构, 所以每个进程是独立的, 进程间必须借助媒介来进行通信, 这些媒介包括管道, 共享内存 消息队列 和信号量1. 匿名管道 匿名管道(在内核中创建的这块缓冲区并没有一个标识), 但是内核会返回给我们用户两个文件描述符(fd[0]缓冲区的读端, fd[1]缓冲区的写端), 创建匿名管道的接口 int pipe(int fd[2]) fd[2] : 具有两个元素的整形数组, 包括fd[0], fd[1], 接口返回值
2020-08-04 23:47:02 956
原创 ext2文件系统, 软/硬链接, 进程间通信
ext2文件系统存储数据 1. 先将文件分成不同的block块, 从Block Bitmap位图当中查找Data blocks区域当中空闲的块, 将文件存储在不同的空闲块中 2. 需要对文件分成不同的block块进行管理, 从inode Bitmap当中查找空闲的inode节点, 从inode Table获取inode 节点, 使用inode 节点描述文件存储信息, 3. 文件名称 + inode节点名称作为目录的目录项保存起来; Bitmap是获取Data bl
2020-08-04 23:39:02 250
原创 重定向和静态库/动态库操作
重定向和静态库/动态库操作重定向:本质: 让我们的newfd文件描述符拷贝oldfd文件描述符,然后再关闭newfd, 标准输出拷贝tmpfile 指向新的struct file标准输入, 标准输出, 标准错误各自所代表的struct file*都指向各自的struct file现在我们打开一个文件tmpfile, 会自动创建一个struct file* 同样打开一个文件 struct file将标准输入的内容重定向到我们的tmpfile当中, 让标准输出不要指向原来的struct fi
2020-08-04 23:26:17 473
原创 C语言的文件操作和系统调用文件操作
基础IO1. C语言中的文件操作 1.1 打开文件 FILE* fopen(const char* path, const char* mode) path: 需要打开哪一个文件的路径加文件名称(可以不加路径, 默认打开是当前路径下的文件) mode: 以什么方式打开文件, r: 以 读 方式打开, 如果打开的文件不存在, 则报错; r+: 以 读写 的方式打开,
2020-08-04 23:04:50 2388
原创 数据表的基本操作(创建, 查看, 修改,插入)和数据类型的区别
数据库和数据表的基本操作校对规则:1. 影响了用户对数据查询的排序2. 后缀为_cs: 大小写敏感的校对规则, 后缀为_ci: 大小写不敏感的校对规则, 后缀为_bin: 二进制校对规则, 大小写敏感3. 校对规则的特征 3.1 不同的字符集有不同的校对规则 3.2 每一个字符集都有一个默认的校对规则 eg: utf8 --> utf8_general_ci(大小写不敏感)数据库备份:mysqldump -p[端口] -u [用户] -p [密码] -B [数据库的
2020-08-04 22:52:54 350
原创 数据库的原理和操作
数据库初识数据库1. 切换到root用户 su - root2. 查看本是否安装了mariadb rpm -qa | grep mariadb3. 查看mariadb的状态 service mariadb status4. 启动mariadb service mariadb start5. 关闭mariadb service mariadb stopmysql数据库在启动的时候, 会先启动一个守护进程 守护进程 进程间通信(一个往共享内存里写东西, 一个读, 发现没更新共享
2020-08-03 23:53:59 209
原创 进程程序替换和minishell
进程程序替换的使用场景:守护进程 (服务24小时不间断运行)基本具备的条件: server可执行程序, 守护进程的程序,认知: 守护进程是由守护程序启动的, 在守护进程这个程序当中使用到了进程程序替换 + 创建子进程 + 进程间通信(判断子进程是否运行正常)守护进程创建出一个子进程, 让子进程程序替换为server可执行程序, 两个程序之间通过进程间通信来进行进程通信,守护体现在:创建子进程 + 进程间通信每隔一段时间获取一下子进程状态(时间),守护进程去获取状态, 若server可执
2020-08-03 19:09:54 165
原创 不同子序列问题
不同子序列题目描述:给定两个字符串S和T,求S有多少个不同的子串与T相同。S的子串定义为在S中任意去掉0个或者多个字符形成的串。子串可以不连续,但是相对位置不能变。比如“ACE”是“ABCDE”的子串,但是“AEC”不是。问题翻译: S有多少个不同的子串与T相同S[1:m]中的子串与T[1:n]相同的个数由S的前m个字符组成的子串与T的前n个字符相同的个数状态:子状态:由S的前1,2,…,m个字符组成的子串与T的1,2,…,n个字符相同的个数F(i,j): S[1:i]中的子串与T[1:j
2020-08-02 12:29:01 400
原创 淘宝网店总收益问题
淘宝网店NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。 现在给你一段时间区间,请你帮他计算总收益有多少。输入描述: 输入包含多组数据。 每组数据包含两个日期from和to (2000-01-01 ≤ from ≤ to ≤ 2999-12-31)。 日期用三个正整数表示,用空格隔开:year month day。输出描述: 对应每一组数据,输出在给定的日期范围(包含开始和结束日期)内能赚多少钱。【题目解析】:这是一个变相的日期计算器。只不过2、
2020-07-31 14:59:57 289
原创 进程控制(1. 进程创建, 2. 进程终止, 3. 进程等待 4.进程程序替换)
进程控制:进程创建forkint fork(void): 创建子进程返回值:成功: 返回两次大于0: 返回给父进程逻辑等于0: 返回给子进程逻辑失败: 返回 -1子进程拷贝父进程的PCB;vfork:int vfork(void)功能:创建子进程创建出来的子进程拷贝部分父进程的PCB, 和父进程共用同一个虚拟地址空间; 如果父子进程同时并行运行 有可能导致调用栈混乱的问题,vfork解决方案:让子进程先运行, 子进程运行完毕后,再让父进程运行vfork函数创建子进程已
2020-07-30 23:52:57 207
原创 二叉搜索树的第k个结点(BST有序性理解)
BST有序性理解给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4解题思路: BST本身就是有序的(左子树小于根结点, 右子树大于根结点),中序遍历即是升序要求第k小,即中序遍历时到达第k个元素(二叉搜索树,不存在两个相同的节点值)采用循环中序遍历的方式(不使用递归), 拿到一个根结点, 先把所有的左节点压栈(通过根结点得到左节点,访问完左节点,才访问根结点—>根结点先进后出—> 选栈结构)中序采用do{…}
2020-07-29 23:06:29 250
原创 按“之“字顺序打印二叉树 (树遍历,stack,queue结合使用)
树遍历,stack,queue结合使用请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:之字形打印,本质也是对树形结构的层序遍历,不过在遍历的过程中,需要更改遍历顺序 采用stack和queue的方式来进行处理核心思路:当前层从左向右遍历,那么下层就从left到right入栈,当前层如果从右向左遍历,那么下层就 从right到left入栈注意:层序遍历(用queue)逆序(stack) 栈
2020-07-29 17:06:41 159
原创 翻转单词顺序列问题(子串划分,子串逆置)
子串划分,子串逆置公司最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一翻转的这些单词顺序可不在行,你能帮助他么?解析: 字符串单个局部逆置字符串整体逆置class Solution {public: void Reverse(s
2020-07-29 17:01:28 173
原创 左旋转字符串问题(字符串逆置,循环次数去重)
字符串逆置,循环次数去重汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!做法:有效左移次数 < 字符串长度 ===> num %= length保存第一个,剩下的整体前移一个,第一个放在最后,完成一次移动,一次能移动,多次也可以局部逆置 再整体逆
2020-07-29 16:59:20 169
原创 二维数组的查找问题(数组相关, 特性观察, 时间复杂度)
数组相关, 特性观察, 时间复杂度在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。查找的过程, 本质就是排除的过程可以比较右上角(这一行最大的,这一列最小的), 或者左下角(这一列中最大的, 这行最小的)的值, 如果当前的值比右上角的值小,至少说明要查找的值绝对不会出现在这一列, (按行列找 一次就可以排除一行或一列), 而遍历一次只能排除一个临界条件(
2020-07-29 08:42:31 1032
原创 和为S的连续正数序列问题(场景转化为模型,滑动窗口)
场景转化为模型,滑动窗口小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序解析: 序列一定是连续且等差的, 且公差为1隐
2020-07-28 17:13:55 87
原创 数组中出现一次的数字(异或理解,位运算)
异或理解,位运算一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字解析:相同数据异或, 就是0任何数据和0异或, 就是本身1. 整体异或, 最终的结果一定是不同数据的异或, 结果一定不为02. x !=0 --> 一定有比特位为1, 不同的两个数据, 异或之后该位置的比特位一定是不同的3. 假设是第n个, 根据遍历数组检测每一个数字的第n个位, 根据是否为1, 将其分组为A,B4. 凡是相同的数据, 一定在同一组, 不同的数据,一定在不同的组
2020-07-28 16:51:03 129
原创 进程虚拟地址
环境变量:是用来定义系统运行环境的一些参数,比如说; 每一个用户的家目录,常见的环境变量:HOME(环境变量名称): 保存用户家目录的环境变量SHELL: 保存才能当前使用的 命令行解释器的名称PATH: 保存可执行程序的路径的环境变量LD_LIBRARY_PATH: 程序运行时, 依赖库文件的搜索路径的环境变量, 动态库环境变量名称CPLUS_INCLUDE_PATH: 可以定义第三方C++头文件所在路径的环境变量常见命令:echo $[环境变量名称]: 可以查看某一个环境变量的值(内容
2020-07-27 17:06:26 339
原创 环境变量知识点
环境变量:环境变量:环境变量是用来定义系统运行环境的一些参数,比如说; 每一个用户的家目录, echo $HOME常见的环境变量: HOME(环境变量名称): 保存用户家目录的环境变量 SHELL: 保存当前使用的命令行解释器的名称 PATH: 保存可执行程序的路径的环境变量 LD_LIBRARY_PATH: 程序运行时, 依赖库文件的搜索路径的环境变量, 动态库环境变量名称 CPLUS_INCLUDE_PATH: 可以定义第三方C++头文件所在路径的环境变量常见命令: ech
2020-07-27 16:27:03 780
原创 系统编程之进程详述
系统编程之进程的概念1. 冯诺依曼体系结构二进制: 所有数据都是按照二进制的方式进行存储内存存储: 数据都是交给存储器设备进行设备中央处理器(CPU), 存储器/内存 , 输入设备(键盘, 网卡) , 输出设备(屏幕, 网卡)2. 操作系统操作系统是一个软件操作系统 = 操作系统内核 (保存操作系统管理计算机资源的代码, 用来管理计算机软硬件资源) + 一组应用操作系统通过描述 + 组织的方式来管理操作系统的软硬件资源硬件设备 + 驱动程序(鼠标驱动) + 操作系统内核 + 系统调用 +
2020-07-26 22:34:04 265
原创 函数模板和类模板
模板如何实现一个通用的交换函数呢?使用函数重载虽然可以实现,但是有一下几个不好的地方:重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?...
2020-07-26 20:41:38 395
原创 星际密码问题
【星际密码】星际战争开展了100年之后,NowCoder终于破译了外星人的密码!他们的密码是一串整数,通过一张表里的信息映射成最终4位密码。表的规则是:n 对应的值是矩阵X的n次方的左上角,如果这个数不足4位则用0填充,如果大于4位的则只输出最后4位。|1 1|^n => |Xn …||1 0| |… …|例如n=2时,|1 1|^2 => |1 1| * |1 1| => |2 1| |1 0| |1 0| |1 0| |1 1|即2对应的数是“0002”。输入描述: 输入
2020-07-23 14:30:44 278
原创 树根问题
【数根】数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。 比如,对于24来说,把2和4相加得到6,由于6 是一位数,因此6 是24 的数根。 再比如39,把3 和9 加起来得到12,由于12 不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。现在给你一个正整数,输出它的数根。输入描述: 输入包含多组数据。 每组数据数据包含一
2020-07-23 13:47:04 468
原创 年终奖问题
【年终奖】小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6 * 6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。给定一个6 * 6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。【解题思路】:本
2020-07-22 16:13:37 177
原创 迷宫问题
【迷宫问题】定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。入口点为[0,0],既第一空格是可以走的路。Input一个
2020-07-22 16:11:50 202
原创 微信红包
【微信红包】春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。 若没有金额超过总数的一半,返回0。【解题思路】:本题两种思路,第一种排序思路,如果一个数出现次数超过一半了,排序过后,必然排在中间,则最后遍历整个数组查看是否符合即可。第二种思路可以用map统计每个数字出现的次数,最后判断有没有超过一
2020-07-18 18:13:29 130
原创 计算字符串的距离
【计算字符串的距离】Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。Ex:字符串A: abcdefg字符串B: abcdef通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。要求: 给定任意两
2020-07-18 18:12:05 304
原创 找出字符串中第一个只出现一次的字符
找出字符串中第一个只出现一次的字符输入描述: 输入一个非空字符串输出描述: 输出第一个只出现一次的字符,如果不存在输出-1【解题思路】:用一个数组的每一个位置表示对应的位置。对应的字符位置存放字符出现的次数。统计完之后,遍历输入字符,遇到第一个只出现一次的字符就停止#include <iostream>#include <string>using namespace std;int main() { string s; while(cin>>s)
2020-07-17 13:05:18 252
原创 小易的升级之路
小易的升级之路小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn.如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?输入描述: 对于每组数据,第一行是两个整数n(1≤n<100000)表示
2020-07-17 13:04:06 171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人