算法
文章平均质量分 63
chyshnu
这个作者很懒,什么都没留下…
展开
-
素数
* 一个数只能被1和本身整除,称为素数。偶数不是素数。 #include #include int main(){ int m, i, k; scanf("%d", &m); k = sqrt(m); for(i=2; i= k+1) printf("m is a prime number."); else printf("m isn't a prime number."); return 0;}原创 2011-01-17 19:47:00 · 482 阅读 · 0 评论 -
又一道挺不错的深度优先搜索题
<br />ZOJ Problem Set - 1984 Genetic Code<br />题目的意思是:打印出一个由'N','O','P'三个字符组成的串,要求这个串中任意长度相邻的子串均不能相同!<br />比如:NOPNO这种串是正确的。NOPNPNO这种串就不允许了,因为中间出现了两个长度为2的相邻的相同子串——"PNPN"。<br />输入输出:<br />Sample Input <br />1------------------>n, 表示串的长度,1<=n<=5000<br />原创 2011-01-31 23:28:00 · 810 阅读 · 0 评论 -
给你一堆长度不一的棒子 让你判断用这些棒子(必须全用)能否拼成一个正方形
<br />ZOJ Problem Set - 1909 Square<br />题目的意思就是标题里面说的那样。<br />输入输出要求如下:<br />Sample Input<br /><br /> 3----------------->表示有几组测试数据<br /> 4 1 1 1 1------->第一个4表示有几根棒子,后面4个数字分别是4根棒子的长度。<br /> 5 10 20 30 40 50<br /> 8 1 7 2 6 4 4 3 5<br />Sampl原创 2011-01-30 00:11:00 · 2110 阅读 · 0 评论 -
一道挺麻烦的深度优先搜索题
题目:ZOJ 1003 Crashing Balloon题目意思是:踩气球比赛,1-100个气球,两个人上去踩,踩完以后把各自踩的所有气球的编号相乘,然后两个人分别报一个数。报小的数的我们称为挑战者,然后叫你判断他们说的是真话还是假话。若两人都说真话,那大数的胜。如果两人都说假话,那还是大数的胜。若小的说真话,大的说假话,那小的胜,即挑战者胜。比如:一个人说343,另一个说49,那就报49的人胜。因为343 = 7 * 49,而只有一个49号气球,所以算挑战者说真话,另外一个人说假话。算法效率不是高,关键是原创 2011-01-25 22:09:00 · 932 阅读 · 0 评论 -
递归的几个应用举例
递归的核心思想就是用于自身问题相似但规模较小的问题来描述自己。递归的特征:1.都有递归终止的边界条件是。2.除了边界条件,其它各处的定义需要用到和自身问题相似但规模较小的问题。几个例子:组合问题:在n个数中选取m(0下面是递归实现的代码:// 求从数组a[1..N]中任选M个元素的所有组合。// a[1..N]表示候选集,M表示一个组合的元素个数。// b[1..M]用来存储当前组合中的元素, 常量M表示一个组合中元素的个数。#include using namespace st原创 2011-01-20 19:45:00 · 980 阅读 · 0 评论 -
最大公约数与最小公倍数
<br />//最大公约数int gcd(int x, int y){ while( x != y ){ if( x > y) x -= y; else y -= x; } return x;}//最小公倍数int lcm(int x, int y){ return x * y / gcd(x, y);}原创 2011-01-18 00:19:00 · 425 阅读 · 0 评论 -
中国剩余定理
(中国剩余定理CRT)设m1,m2,...,mk是两两互素的正整数,即gcd(mi, mj) =1, i≠j, i,j = 1,2,...,k则同余方程组: x≡b1 mod m1 x≡b2 mod m ... x≡bk mod mk模[m1,m2,...,mk]有唯一解,即在[m1,m2,...,mk]的意义下,存在唯一的x,满足:x≡bi mod [m1,m2,...,mk], i = 1,2,...,k实例: 有一个年级的同学,每9人一排多5人,每7人一排多1人,每5人一原创 2011-01-18 16:43:00 · 707 阅读 · 0 评论 -
闰年
<br />闰年的条件是符合下列两者之一:<br />1.能被4整除,但不能被100整除。<br />2.能被100整除,又能被400整除。<br />(year % 4 == 0 && year % 100 != 0) || year % 400 == 0原创 2011-01-17 20:52:00 · 529 阅读 · 0 评论 -
合并排序(归并排序)
<br />算法步骤:<br />1)将n个元素分成各含n/2个元素的子序列;<br />2)对两个子序列递归地排序;<br />3)合并两个以排序的子序列以得到排序结果。<br /> <br />最差时间复杂度Θ(nlogn)<br />最优时间复杂度Θ(n)<br /> <br /><br />#include <stdio.h>#include <stdlib.h>#include <string.h>#define N 6void Merge(int nums[]原创 2011-01-19 15:28:00 · 674 阅读 · 0 评论 -
DFS中的奇偶剪枝
什么是奇偶剪枝?把矩阵看成如下形式: 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 从为 0 的格子走一步,必然走向为 1 的格子 。从为 1 的格子走一步,必然走向为 0 的格子 。即: 从 0 走向 1 必然是奇数步,从 0 走向 0 必然是偶数步。所以当遇到从 0 走向 0 但是要求时间是奇数的或者 从 1 走向 0 但是要求时间是偶数的,都可以直接判断不可原创 2011-02-01 21:58:00 · 7043 阅读 · 8 评论