首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言经典算法

古典问题:有一对兔子,从出生第三个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数是多少? 分析:前两个数之和为第三个数的值,即有名的斐波那契数列。...if(n<m){ temp = n; n = m; m = temp; }; p=n*m; // 欧几里德算法 // 100 模 60 余 40 // 60...='\n'){ // 字符 if(c>='a'&&c='A'&& c<='Z'){ letters++; // 空格 }else if(c...猴子吃桃问题:猴子第一天吃下若干个桃子,当即吃下一半,还不过瘾,又多吃了一个,第二天又将剩下的桃子吃了一半,又多吃了一个,以后每天都吃前一天剩下的一半零一个,到第10天想早上再吃时,只剩下一个桃子了。...='z'){ printf("a--%c\tb--%c\tc--%c\n",i,j,k); // a--z b--x c--y

4.4K30

php递归算法经典实例_汉诺塔问题递归算法c语言

利用PHP实现 汉诺塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。...php // 汉诺塔算法 // 实现逻辑 --> 递归 (关系可以由 n=2 比较容易想出) // 把 第 n-1 个由 A 移动到C // 把 第 n 个 由 A 移动到 B // 把 第 n-1 个由...""; // 把n-1 由C 移动到 B hanuota($n-1, $c, $b, $a); } } $step = 0; hanuota(4, 'A', 'B', 'C'); echo...$step . " 次"; 实现效果 把第 1 个由A 移动到 C 把第 2 个由A 移动到 B 把第 1 个由C 移动到 B 把第 3 个由A 移动到 C 把第 1 个由B 移动到 A 把第 2 个由...B 移动到 C 把第 1 个由A 移动到 C 把第 4 个由A 移动到 B 把第 1 个由C 移动到 B 把第 2 个由C 移动到 A 把第 1 个由B 移动到 A 把第 3 个由C 移动到 B 把第

38510
您找到你想要的搜索结果了吗?
是的
没有找到

C++经典算法题-背包问题

13.Algorithm Gossip: 背包问题(Knapsack Problem) 说明 假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物 品,假设是水果好了,水果的编号...、单价与重量如下所示: 解法 背包问题是关于最佳化的问题,要解最佳化问题可以使用「动态规划」(Dynamic programming),从空集合开始,每增加一个元素就先求出该阶段的最佳解,直到所有的元素加入至集合中...以背包问题为例,我们使用两个阵列value与item,value表示目前的最佳解所得之总价,item表示最后一个放至背包的水果,假设有负重量 1~8的背包8个,并对每个背包求其最佳解。...C代码 #include #include #define LIMIT 8 // 重量限制#define N 5 // 物品种类#define MIN 1 /

43930

C语言 排序算法_C语言中三大经典的排序算法

时间复杂度:O(N^2) 空间复杂度:O(1),它是一种稳定的排序算法 稳定性:稳定 1.2希尔排序 希尔排序法又称缩小增量法。..., key+1, right); } 1.空间复杂度 0(lgn) 2.时间复杂度0(n*lgn) 3.3快速排序的优化(非递归) 主要通过数据结构栈来模拟实现类似于二叉树的前序遍历 如果有同学对C语言实现栈不熟悉可以点一下链接...:C源实现数据结构栈 具体代码如下: typedef int STDataType; typedef struct Stack { STDataType* a; int top; // 栈顶 int...,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。...*)malloc(sizeof(int) * n); _MergeSort(a, tmp, 0, n - 1); } 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题

2.7K20

C语言经典递归题目 -- 汉诺塔问题

目录 题目描述 画图分析 思路总结 代码实现 总结 题目描述 汉诺塔问题起源于一个传说 汉诺塔又被称为河内塔,传说,在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。...,我们把最小的盘子命名为1,中间的为2,最大的为3,那么移动顺序应该是:1号移到到C柱,2号移动到B柱,1号移动到B柱,3号移动到C柱,1号移动到A柱,2号移动到C柱,1号移动到C柱;一共移动7次,移动顺序是...A->C A->B C->B A->C B->A B->C A->C A->C A->B C->B A->C B->A B->C A->C 思路总结 在上面的移动过程中,...比如,上面盘子个数为三的时候,我们可以分解为:第一步:1号移到到C柱,2号移动到B柱,1号移动到B柱;第二步:3号移动到C柱;第三步:1号移动到A柱,2号移动到C柱,1号移动到C柱。...printf("\n"); Hanoi(4, pos1, pos2, pos3); //n为4 printf("\n"); return 0; } 总结 知道了汉诺塔的逻辑后,我们重新回到这个问题

39600

经典算法之约瑟夫问题

基本问题描述: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。...(也类似于变态杀人狂问题)通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序号要怎么确定。...n-1个人的报数问题(即n-1阶约瑟夫环的问题) 可能以上过程你还是觉得不太清晰,那么我们重复以上过程,继续推导剩余的n-1个人的约瑟夫环的问题: 那么在这剩下的n-1个人中,我们也可以为了方便,将这n...n-2阶约瑟夫环的问题呢?...借助上面的分析过程,我们知道,当在解决n阶约瑟夫环问题时,序号为k1的人出列后,剩下的n-1个人又重新组成了一个n-1阶的约瑟夫环,那么 假如得到了这个n-1阶约瑟夫环问题的结果为ans(即最后一个出列的人编号为

1.4K10

C语言经典笔试题

A: main()函数里的i是一个未定义值 B: main()函数的i为1 C: 编译器不允许这种写法 D: main()里i的值为0 解答:当笔试者看到此代码时,可能会觉得古怪。...A:13 13 B:112 13 C :12 12 D:12 13 解析:本题主要考察指针以及栈的概念 。...以下代码说法正确的是: A:一定输出-120 B:一定不能输出-120 C:可能输出-120 D:输出%d 解答:本题乍一看,-120木有问题!...第二步呢就有个问题了。以32位系统常规平台来看,是将8字节数据的char类型变量放到32个字节的int变量里去,那这里就存在一个问题了!...没错,那就是大小端存储导致的问题,即-120这个数字对应的八个位的二进制码是放到int变量的高位还是低位,所以结果自然不必多说了。 答案:C C语言(clang.cc)研究中心

2K80

Java经典问题算法大全

/【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?...System.out.print(j + "" + i + "=" + j*i + " " ); } System.out.println(); } } } //【程序17】 //作者 若水飞天 //题目:猴子吃桃问题...说明: 这个算法实现虽然实现了这个功能,但不健壮,当输入字符是,会出现异常。...C语言C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言CC++更容易实现链表结构。...Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。

38800

Java经典问题算法大全

/【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?...System.out.print(j + "" + i + "=" + j*i + " " ); } System.out.println(); } } } //【程序17】 //作者 若水飞天 //题目:猴子吃桃问题...说明: 这个算法实现虽然实现了这个功能,但不健壮,当输入字符是,会出现异常。...C语言C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言CC++更容易实现链表结构。...Java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。

50300

C++ 经典排序算法

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 1.2.算法原理: 冒泡排序算法的运作如下:(从后往前) 1.比较相邻的元素。...最佳情况下,每次划分都是对称的,由于中心值不再考虑,所以得到的两个子问题的大小不可能大于n/2,同时一趟快速排序时间为o(n),所以运行时间递归表达式: T(n)<=2T(n/2)+o(n)。...早了解和熟悉了排序过程后,我们发现,直接插入排序是一种稳定的原地排序算法。...看了这么多比较经典的排序算法,有没有觉得算法真的是一个神奇的“道具”。稍微一改优化就能大大提升效率。针对不同的情况选择最优的算法,提高效率也正是我们在项目中所追求的。...如果小伙伴们有更多的有趣和经典算法,也欢迎给老九君留言哦,我们都会不断的完善和补充! 老九学堂出品

96820

C++经典算法题-PI算法

为高斯符号,也就是取至整数(不大于L/1.39794的整数);为了计简方便,可以在程式中使用下面这个公式来计简第n项: [W -1/52- V -1 / (2392)] / (2*n-1) 这个公式的演算法配合大数运算函式的演算法为...: div(w, 25, w); div(v, 239, v); div(v, 239, v); sub(w, v, q); div(q, 2*k-1, q) 至于大数运算的演算法,请参考之前的文章,...必须注意的是在输出时,由于是输出阵列中的整数值,如果阵列中整数位数不满四位,则必须补上0,在C语言中只要 使用格式指定字%04d, 使得不足位数部份自动补上0再输出,至于Java的部份,使用 NumberFormat...c[i] < 10000) carry = 0; else { // 进位 c[i] = c[i] - 10000;...for(i = N+1; i >= 0; i--) { c[i] = a[i] - b[i] - borrow; if(c[i] >= 0) borrow

79420
领券