摘要:
经典开关问题:大概意思如下:一个监狱看守员喝醉了酒,于是把监狱每扇门都打开(假设有n扇门);然后再从1号门开始,隔一扇关一个门(把2的倍数的门关掉);接着再从1号门开始,隔2扇操作一个门(操作3的倍数的门,原来是开的关掉,关着的则打开)。这样一直操作到n的倍数,问最后有多少扇门是打开的。这个也可以叫关灯问题:有n个灯,分别由n个开关控制,拨一下开关则可以改变灯的状态(开->关 关->开)。初始状态灯都是关着的,先把每个开关都拨一下,然后拨一下2的倍数的开关,接着3的倍数,直到n的倍数,问最后有多少灯是开着的。模拟: 1 #include 2 #include 3 #include 阅读全文
摘要:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////生成函数是说,构造这么一个多项式函数g(x),使得x的n次方系数为f(n)。对于母函数,看到最多的是这样两句话:1.“把组合问题的加法法则和幂级数的乘幂对应起来。”2.“把离散数列和幂级数一 一对应起来,把离散数列间的相互结合关系对应成为幂级数间的运算关系,最后由幂级数 阅读全文
摘要:
一个模版:算n的阶乘末尾0的个数,但是数字较大的时候则比较麻烦,可以通过如下原理反复的除以5得到最后的结果:原理是: 假如你把1×2×3×4×……×N中每一个因数分解质因数,结果就像: 1 × 2 × 3 × (2 × 2) × 5 × (2 × 3) × 7 × (2 × 2 ×2) ×…… 10进制数结尾的每一个0都表示有一个因数10存在——任何进制都一样,对于一个M进制的数,让结尾多一个0就等价于乘以M。 10可以分解为 阅读全文
摘要:
约瑟夫环问题题目描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为s的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。分析:先考虑从第一个人开始报数的情况;如果考虑从1开始编号,则编号为k的人出列之后,下一个要出列的人的编号为:(k+m-1)%n+1,于是,如果从x开始编号的话,下一个拖出去受死的人的编号就应该是:(k+m-x)%n+x了;下面选择从0开始编号:先标记这n个数,从0开始到n-1;编号为k的人出列后,下一个要出列的人的编号为:(k+m)%n (假设当 阅读全文