0%

卡特兰数经典例题

原题链接:

解决方法: Catalan Number

为何是卡特兰数?解释原理:

x为最后一个出栈的,可以将原来的栈分为两部分

阅读全文 »

简单记录快速幂原理

以a^11为例:

11的二进制数为1011,二进制从右向左算,但乘出来的顺序是 a^(2^0)*a^(2^1)*a^(2^3),是从左向右的。我们不断的让base *= base目的是累乘,以便随时对ans做出贡献。

要理解base *= base这一步:因为base * base == base ^ 2,下一步再乘,就是(base ^ 2) * (base ^ 2) == base ^ 4,然后同理(base ^ 4) * (base ^ 4) == base ^ 8,由此可以做到base base ^ 2 base ^ 4 base ^ 8 base ^ 16 base ^ 32…….指数正好是 2 ^ i 。再看上面的例子,a= (a ^ 1) * (a ^ 2) * (a ^ 8),这三项就可以完美解决了,快速幂就是这样。

阅读全文 »

什么是辗转相除法

欧几里德算法又称辗转相除法,是指用于计算两个正整数a,b的最大公约数。

From Baidu

辗转相除法递归式

gcd(a,b) = gcd(b,a mod b)

阅读全文 »

此题最简单的方法,其实前面已经有大佬@SocietyNiu讲过了,就是用Python做一个简单的打表

步骤

  1. 先输入打表后的数据
  2. 输入数据
  3. 输出表中的答案
阅读全文 »

参考博客

题目描述

对于从1到N的连续整集合,划分为两个子集合,且保证每个集合的数字和是相等的。因而,划分之后每个子集全的数字应该为n(n+1)/2的一半,即n(n+1)/4由于两个子集中都是整数,所以n*(n+1)必为偶数,则可以设s=n*(n+1),并判断s%4 .则,s/=4是划分之后子集合的数字和;dyn[i]数组表示任意个数加起来等于i的组数。**

阅读全文 »

河内塔(Towers of Hanoi)是法国人M.Claus(Lucas)于1883年从泰国带至法国的,河内之塔为越战时北越的首都
,即现在的胡志明市;1883年法国数学家Edouar Lucas曾提及这个故事,据说创世纪时Benares有一座波罗教塔,
是由三支钻石棒所支撑,开始时神在第一根棒上放置64个由上至下依由小到大排列的金盘(Disc),并命令僧侣将
所有的金盘从第一根石棒移至第三根石棒,且搬运过程中遵守大盘子在小盘子之下的原则,若每日仅搬一个盘子,
则当盘子全数搬运完毕之时,此塔将毁损,而也就是世界末日的来临之时。

解法:
如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。如果
盘数超过两个,将第三个以下的盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B,A->C,B->C这三个
步骤,而被遮住的部分,其实就是进入程式的递回处理。事实上,若有n个盘子,则先移动完毕所需次数为(2^n)-1,
所以当盘数为64时,则所需次数为(2^64)-1 = 18446744073709551615为5.05390248594782e+16年,也就是约5000
世纪,如果对这数字没什么概念,就假设每秒钟搬一个盘子好了,也要5850亿年左右。

阅读全文 »