算法
KSkun
这个作者很懒,什么都没留下…
展开
-
排序算法:选择排序
一、原理(1) 从整个数组中找到最小值,并将其移动至第0位 (2) 从第1位到最后数组找到最小值,并将其移动至第1位 … (n) 从第(n-1)位到最后数组找到最小值,并将其移动至第(n-1)位实现可以使用双嵌套循环,第一层指定数组起点,第二层取出最小值。二、实现#include <cstdio>int main() { // 输入 int n; scanf("%d",原创 2016-12-07 11:56:24 · 395 阅读 · 0 评论 -
高精度整数(n进制,n<=10)加法
一、概述高精度整数的意思即是数据范围极大,已经无法用unsigned long long存储的数据的运算。很多OJ中都有相关练习题(如a+b升级版等),而对于故意给出极大数据的题目此算法为常用算法。 本章仅研究对于10进制以内(2进制~10进制)数的加法。本章将使用例题的讲解方法。二、例题例题1已知两个10进制数a,b,求a+b的值。数据范围对于a,b,50%的数据不大于10100。输入输出输入1原创 2016-12-15 17:57:47 · 2000 阅读 · 0 评论 -
数论:整数规则
一、常见数字的整除判定方法1.一个数的末位能被2或5整除,这个数就能被2或5整除;一个数的末两位能被4或25整除,这个数就能被4或25整除;一个数的末三位能被8或125整除,这个数就能被8或125整除;2.一个位数数字和能被3整除,这个数就能被3整除; 一个数各位数数字和能被9整除,这个数就能被9整除;3.如果一个整数的奇数位上的数字之和与偶数位上的数字之和的差能被11整除,那么这个数能被11整除.转载 2016-12-14 11:51:01 · 918 阅读 · 0 评论 -
求最大公因数:辗转相除法(欧几里德算法)
辗转相除法即欧几里德算法。对于任意两个自然数a和b,如果q和r是a除以b的商和余数,那么a和b的最大公约数等于b和r的最大公约数。求解过程可描述如下:(1)a除以b,得到商q和余数r1;(2)若r1=0,则a和b最大公约数为b;(3)若r1≠0,则继续(1),即b除以r1得到商q和余数r2;(4)若r2=0,则a和b最大公约数为r1;(5)若r2≠0,则继续(1),即b除以原创 2016-12-04 09:23:28 · 5863 阅读 · 1 评论 -
求质数:筛选法(埃拉托色尼筛法)
所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。原理先将所有范围内的正整数列出,构成数集A。 (1) 从A中删去1; (2) 从A中删去2的整数倍; (3) 从A中删去3的整数倍; (4) 从A中删去5的整数倍; … (原创 2016-12-04 15:35:27 · 865 阅读 · 0 评论 -
进制转换:二进制和十进制的互转和推广至任意进制
二进制是信息技术中常用的数制。二进制的基数为2,进位规则“逢二进一”,借位规则“借一当二”。一、十进制转换至二进制通常采用“除二取余,逆序连接”方法。 (13)52=(00110100)2 二、二进制转换为十进制采用“权值展开”方法。 (1101)2=(1*23+1*22+0*21+1*20)10=(8+4+0+1)10=(13)10三、推广类似地,我们可以使用以上方法来解决16进制或8进制的原创 2016-12-04 09:38:08 · 812 阅读 · 0 评论 -
排序算法:插入排序
一、原理对于长度为n的数组,遍历其中元素,并且将其插入其之前一段有序数据中合适的位置。二、程序(1)从第1个数据取起,向其之前(第0个、…)查找第一个小于该数据的位置为i; (2)将i之后的元素向后转移1位; (3)将该元素放入第i+1位。三、实现#include <cstdio>int main() { int n; scanf("%d", &n); int data[原创 2016-12-11 09:41:55 · 423 阅读 · 0 评论 -
查找算法:二分法查找
一、原理对于长度为n的有序数组,一般我们采用遍历数组的方法找到数据的位置,这样做效率较低。如果我们能采用二分法的思想,逐步拆分成在很小数组内找解,就能节省很多时间。 对于这种方法,只需要使二分法的中间位置指针指向要找的数据,便可得到答案。二、程序使用while循环判断是否mid指向要查找的数据,维护low和high的指向即可。三、实现#include <cstdio>int main() {原创 2016-12-11 10:38:00 · 373 阅读 · 0 评论 -
排序算法:希尔排序(优化插入排序)
一、原理希尔排序实际上是一种分治思想,将给出数组分为一段段子数组并先对子数组进行直接插入排序,形成部分有序数组,缩小分割子数组的增量,再次重复。这样比遍历线性查找节省时间。二、原理如下图 三、实现#include <cstdio>int main() { int n; scanf("%d", &n); int data[n + 5]; int i; for(原创 2016-12-11 09:57:54 · 505 阅读 · 0 评论 -
排序算法:冒泡排序
实现#include <cstdio>int main() { int n; scanf("%d", &n); int data[n + 5]; int i; for(i = 0; i < n; i++) { scanf("%d", &data[i]); } int temp;}原创 2016-12-08 17:58:23 · 389 阅读 · 0 评论 -
二进制最大公约数算法
一、介绍二进制最大公约数算法避免了欧几里得算法(辗转相除法)的大量取模操作,有效减少了时间消耗,且更为方便。二、原理本算法基于以下事实: 对于两个数的最大公约数gcd(m, n),有m<n时,gcd(m, n)=gcd(n, m)m偶n偶时,gcd(m, n)=2*gcd(m/2, n/2)m偶n奇时,gcd(m, n)=gcd(m/2, n)m奇n偶时,gcd(m, n)=gcd(m,原创 2016-12-25 08:50:04 · 1410 阅读 · 0 评论