摘要: 1、本节的折半查找算法有一个特点:如果待查找的元素在数组中有多个则返回其中任意一个,以本节定义的数组int a[8] = { 1, 2, 2, 2, 5, 6, 8, 9 };为例,如果调用binarysearch(2)则返回3,即a[3],而有些场合下要求这样的查找返回a[1],也就是说,如果待查找的元素在数组中有多个则返回第一个。请修改折半查找算法实现这一特性。//By LYLtim#include<stdio.h>#define LEN 8int a[LEN] = { 1, 2, 2, 2, 5, 6, 8, 9 };int Search(int k){ int start 阅读全文
posted @ 2011-11-09 16:40 LYLtim 阅读(997) 评论(0) 推荐(0) 编辑
摘要: ===== 真正强的东西来了! =====二进制中的1有奇数个还是偶数个我 们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1。例 如,1314520的二进制101000000111011011000中有9个1,则x=1314520时程序输出1。var i,x,c:longint;begin readln(x); c:=0; for i:=1 to 32 do begin c:=c + x and 1; x:=x shr 1; end; writeln( c an... 阅读全文
posted @ 2011-11-05 07:20 LYLtim 阅读(800) 评论(0) 推荐(0) 编辑
摘要: 去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如说是一个remake。当然首先我还是从最基础的东西说起。什么是位运算?程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 a. 阅读全文
posted @ 2011-11-04 23:03 LYLtim 阅读(663) 评论(0) 推荐(0) 编辑
摘要: 在一组随机排列的数中找出第k小的,这个元素称为k-th Order Statistic。能想到的最直观的算法肯定是先把这些数排序然后取第k个,时间复杂度和排序算法相同,可以是Θ(nlgn),但它也有平均情况下时间复杂度是Θ(n)的算法,将快速排序算法稍加修改就可以解决这个问题: 1 /* 2 **Find out the K-th small number of a set of random numbers with O(n) 3 **2011.10.25 4 **By LYLtim 5 */ 6 7 #include<stdio.h> 8 #include<stdlib. 阅读全文
posted @ 2011-10-29 08:15 LYLtim 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 定义一个二维数组:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。程序如下://By LYLtim#include<stdio.h>#include<stdlib.h>const char Di[4] = {0,1,0,-1}, Dj[4] = {1,0,-1,0};char maze[5][5] = { 2, 阅读全文
posted @ 2011-10-21 20:11 LYLtim 阅读(679) 评论(0) 推荐(0) 编辑
摘要: 定义一个二维数组:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。程序如下://By LYLtim#include<stdio.h>#include<stdlib.h>const char Di[4] = {0,1,0,-1}, Dj[4] = {1,0,-1,0};char maze[5][5] = { 2, 阅读全文
posted @ 2011-10-15 10:35 LYLtim 阅读(517) 评论(0) 推荐(1) 编辑
摘要: K&R的TCPL是经典啊,看得我感觉功力大增,不过中文版略坑爹,建议看原版。英文版:http://www.docin.com/p-284657951.html中文版: 阅读全文
posted @ 2011-10-15 09:45 LYLtim 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 普通的筛法就不多说了,今天动了点脑筋,对普通的筛法做了点常数优化,主要是利用素数除了2以外全是奇数,那偶数就能排除掉不用再管了,再进一步优化就是只需排除素数的所有奇数倍。时间复杂度好像是O(N+1/4logNlogN)?感觉好像不对啊,求指导。。。>_<C语言代码://By LYLtim #include<stdio.h>#include<math.h>int main(void) { unsigned i, j, n = 100, n_sqrt = sqrt(n), sum = 0; char isprime[n + 1]; //初始化数组,除了2以外,偶 阅读全文
posted @ 2011-09-30 20:32 LYLtim 阅读(843) 评论(0) 推荐(0) 编辑
摘要: 本文内容遵从CC版权协议 转载请注明出自matrix67.com本文目的:介绍C语言最基本的用法,能对付NOIp就行本文特点:没有废话,不讲概念,只介绍语法适宜读者:已经学过其它语言,希望学习C语言的人;特别适合熟练Pascal并想转用C语言的OIer编程环境:就我个人而言,Windows下用Dev-C++,Linux下用Emacs目录:C语言速成手册(一):基本数据类型、标准输出、函数C语言速成手册(二):布尔值、条件判断、循环C语言速成手册(三):数组、字符串、结构C语言速成手册(四):指针、动态内存分配、标准输入C语言速成手册(五):其它运算符、文件操作、其它函数C语言速成手册(六):其 阅读全文
posted @ 2011-08-27 16:43 LYLtim 阅读(336) 评论(0) 推荐(0) 编辑
摘要: 1.快速排序//By LYLtimvoid swap(int *a, int *b){ int t = *a; *a = *b; *b = t; }void QSort(int l, int r){ int lp = l, rp = r, m = (l + r) >> 1; while (lp a[m]) rp--; if (lp > 1; sort(start, mid); sort(mid+1, end); merge(start, mid, end); }}3.希尔排序//By LYLtimvoid ShellSort(int a[], unsigned n){ uns 阅读全文
posted @ 2011-08-12 11:41 LYLtim 阅读(538) 评论(0) 推荐(0) 编辑
摘要: 编写函数diamond打印一个菱形。如果调用diamond(3, '*')则打印: ** * * *如果调用diamond(5, '+')则打印: + + + ++ + + + + + + + +如果用偶数做参数则打印错误提示。/*每一行的星号和空格的数量是纵坐标i的函数关系,**图形关于横轴对... 阅读全文
posted @ 2011-08-04 17:57 LYLtim 阅读(1030) 评论(0) 推荐(0) 编辑
摘要: 打包下载docbook源码下载宋劲杉北京亚嵌教育研究中心<songjinshan AT akaedu DOT org>版权 © 2008, 2009 宋劲杉, 北京亚嵌教育研究中心本书前两部分已整理出版,详见http://www.china-pub.com/196188,http://www.douban.com/subject/4141733,由于和出版社之间的协议,出版的最新版本将延迟一段时间才能在网上公开源文件。谢谢大家的支持!最近收到一些读者回应,特在此做出答复:本站公开的版本和出版的最新版本有一些差异,显然是出版的版本更完善一些,但出版的版本迟早一定会在本站公开 阅读全文
posted @ 2011-07-08 09:34 LYLtim 阅读(681) 评论(3) 推荐(0) 编辑