算法和数据结构
Supreme_One
这个作者很懒,什么都没留下…
展开
-
排列和组合
排列:一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列。当m=n时,这个排列被称作全排列。 组合:一般地,从n个不同的元素中,任取m(m≤n)个元素为一组。转载 2017-09-22 17:31:32 · 268 阅读 · 0 评论 -
组合数
意思:从m个不同元素中取出n(n≤m)个元素的所有组合,叫做从m个不同元素中取出n个元素的组合数。 例子:6个取3个 654 653 652 651 643 642 641 632 631 621 543 542 541 532 531 521 432 431 421 321 原理:设两个数组a[m],b[m],a[m]中保存m个数值,b[m原创 2017-09-21 20:44:14 · 349 阅读 · 0 评论 -
直接插入排序
原理:一串数,从第二个数开始,把之前比该数大的数向后移,把该数放到比它小的数值之前,对每一个数值操作都已经把之前的数值排好序了。因此只要该数大于它的前一个数值,就不需要排序了。 代码: void insert_sort(int a[],int n)//a[n]储存要排序的数值,n为数量 { int i,j,temp; //i,j用来循环,temp保存当前数值 for(i=1;i原创 2017-09-25 14:10:18 · 259 阅读 · 0 评论 -
欧几里得算法
欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。 代码: public static int gcd(int a,int b) { //a > b if(b==0){ return a; } int c = a % b; return gcd(b,c); } 3.欧几里德算法的优点: 通过模运算的余数是最大公约数之间存在的转载 2017-09-17 21:03:25 · 368 阅读 · 0 评论 -
牛顿迭代法
牛顿迭代法,快速求平方根的方法之一。 代码: public static double sqrt(double c) { if(c<0) return Double.NaN; //NaN 非数字 double err=1e-15; //0.000..0(15个0)1 表示俩值无限接近 double t=c; while(Math.abs(t - c / t ) > e原创 2017-09-18 16:29:47 · 542 阅读 · 0 评论 -
素数距离问题
解释:输入一个值,判断该值距离最近素数的距离。 #include using namespace std; int sushu(int val)//判断是否为素数 { int i=2; for(i=2;i { if(val%i==0) { return -2;//非素数 } } if(i>=val) { return -1;//素数 } } int ma原创 2017-11-12 13:47:44 · 267 阅读 · 0 评论 -
在一个整型数组a中,删除所有的大于24的数值,并且要求算法对任意的这种数组算法都成立。
题目: 编程:请分别求解以下问题 在一个整型数组a中,删除所有的大于24的数值,并且要求算法对任意的这种数组算法都成立。 如果要求剩余数组中元素不改变原有元素的相对顺序,且空间复杂度为O(1) 如果要求算法时间复杂度为O(n),空间复杂度为O(1) void deleteall(int a[] ,int &n)//a为待删除的数组,n为元素个数 分别构造10组测试用例,证明算法确...原创 2018-12-27 12:45:34 · 473 阅读 · 0 评论