自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shandianling

学无止境——不随流,踏踏实实向前走,为理想而奋斗。

  • 博客(38)
  • 资源 (12)
  • 收藏
  • 关注

原创 数组与指针的区别

int a[100];char a[10];char *b="ABCD";a是数组,包含的信息不一样,它包含它所在的内存地址,还有长度,而b只是一个指针,它只是刚好指向了一个字符串的地址而已.因为a是一个数组,所以也不像指针一样,可以自增自减,像++a,a--是错误的,但 a+1,a-1是可以编译通过的.

2012-08-31 11:08:55 378

原创 ++i 与 i++

i++相当于int operation++(int &i){ int tmp=i; ++i; return tmp;}可以C/C++中 printf("%d",i++);与printf("%d",++i); cout<<i++; 与cout << ++i; 看看区别.

2012-08-31 10:42:45 423

原创 operator++()和operator++(int) 区别

++i; // 调用 i.operator++();i++; // 调用 i.operator++(0);

2012-08-30 16:31:43 1898

原创 大数相加 相乘

用字符串保存两个大数。 把加法分解成: 一,同一位上为 (a+b)%10 二,进位(a+b)/10 ,三,把第一数+进位感觉是递归了。但可以用循环在代替。  大数相乘也差不多,第二数的每一位数都与第一个数每一位相乘,然后相加起来.以下我们假设两个字符串里都是数字,之里不做判断了.为了解题方便,我还把数字都移到数组的右端,方便相加.不足是会浪费一些时间 #include #inc

2012-08-28 21:25:20 646

转载 memcpy memmove区别和实现

memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。但当源内存和目标内存存在重叠时,memcpy会出现错误,而memmove能正确地实施拷贝,但这也增加了一点点开销。memmove的处理措施:(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝(3)当源内存的首地址小于目标内存

2012-08-28 16:32:11 532

原创 分离字符串中的*

函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。    如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)想法:有点像上篇中的删除 字符串的数字并压缩。   解法:从后到前,遇到字母(非*),就与*交换。#include #incl

2012-08-28 16:10:47 1340

原创 删除字符串中的数字并压缩。

两个指针,使一个指针指向数字,一个指针指向字母。#include #include char* delNumsOfStr(char *str){ if(str ==NULL) return NULL; char *pi,*pk; pi=pk=str; while(*pi != '\0') { if(*pi '9') { *pk++=*pi++; } else

2012-08-28 15:04:20 1042

原创 在一个数组中,找出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它

一个int 数组,里面数据无任何限制,要求求出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它。能否只用一个额外数组和少量其它空间实现。思想:一看这题,就想到快速排序中的 一次排序, 左边so: 如果原数组与排好序的数组 一一比较,a[i]==b[i] 不就是所求么?#include #include #include void pr_arr(int

2012-08-28 11:27:43 5287 2

原创 对策字符串的最大长度。

题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。  想法:有点像判断某个字符串是不是回文(如: aba abccba) ;不过解法可能不太一样了。

2012-08-27 21:48:41 1128

原创 求两个字符串的最长的连续公共子串

这与求两个字符串的公共子序列要区分开,见http://blog.csdn.net/shandianling/article/details/7888050但 求你方法与求公共子序列类似,而且要简单一点。方法:动态规划.循环遍历两个字符串,查找当s1[i]==s2[k] 的情况 然后保存在c[i][k]中,c[i][k]=c[i-1][k-1]+1 最后我们会得到类似以下矩阵

2012-08-27 21:36:37 19714

原创 数组中超过出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。思想:我们假设存在这样的数字,次数超过一半,那么那个数的次数减去其它数字的次数一定大于0.说白了就是:从前到后,碰到两个不两同的数,我们就删了它们,当然不是真删除,我们可以用一个记数器+一个变量保存频繁出现的值。这样最后得到的数就是要求的。还有一种比较偷懒的方法,但效率要差,先排序qsort一下,那么中间那个元素一定是

2012-08-27 17:19:24 1066

原创 旋转数组的最小元素

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。  解题:类似二分查找,使用两个指针:left ,right 指向一前一后,一般情况下arr[left]一定大于等于arr[right],除非排序好的数组本身没动过

2012-08-27 15:42:19 653

原创 n个骰子的点数之和的概率

n个骰子的点数。把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。思想:F(n,s) = F(n-1,s-6)+F(n-1,s-5)+F(n-1,s-4)+F(n-1,s-3)+F(n-1,s-2)+F(n-1,s-1);#include #include #include int power(int base,unsigned in

2012-08-27 14:34:11 4299

原创 linux 与window下c申请'变长'数组的疑问

在ubuntu下,用C写下int main(){ int N=10; int a[N]; return 0;}编译没问题。但在window下用VS2008测试,出现问题:error C2057: 应输入常量表达式error C2466: 不能分配常量大小为 0 的数组error C2133: “a”: 未知的大小原因:与操作系统无关,与编

2012-08-27 13:03:30 1282

原创 求数值的整数次方。

n为偶数时:X^n =(X^(n/2))^2 n为奇数时:X^n =(X^(n/2))^2 * X#include #include //base的N次方int power(int base,unsigned int n){ if(n==0) return 1; if(n==1) return base; int half=power(base,n>>1);

2012-08-27 09:52:28 490

原创 扑克牌的顺子

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。#include #include int cmp(const void *a, const void *b){ return *(int *) a - *(int *) b;}/* * i 表示从哪开始,gaps表示可

2012-08-26 16:38:36 488

原创 不用+、-、×、÷做加法

思想: 把加法分解:1) 先做异或者 2) 进位:(num1 & num2) 3) 再相加 ==>用递归来实现int AddWithoutArithmetic(int num1, int num2){ if(num2 == 0) return num1; int sum = num1 ^ num2;

2012-08-26 15:58:40 389

转载 寻找丑数(Ugly Number)

我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。   所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数的定义,丑数只能被2、3和5整除。也就是说如果一个数如果它能被2整除,我们把它连续除以2;如果能被3整除,就连续除以3

2012-08-26 15:35:34 533

原创 1)两链表的第一个公共结点 2)判断两链表是否相交

分别遍历两个链表得到它们的长度,并求出两个长度之差。在长的链表上先遍历若干次之后,再同步遍历两个链表,知道找到相同的结点,或者一直到链表结束。此时,如果第一个链表的长度为m,第二个链表的长度为n,该方法的时间复杂度为O(m+n)。判断两链表是否相交:1)使用此法。2)把一条链表的末尾与另一条的头相连,然后判断是否存在环。存在环的方法:一个指针走一步,另一个指针走二步,如果有环,必定相遇。

2012-08-26 14:59:45 574

原创 快速排序

void qs(int a[], int begin, int end){ int compare = a[begin], left = begin, right = end; if (left > right) return; while (left < right) { while ((left = compare) right--; a[left]=a[right

2012-08-26 14:27:35 346

原创 全排列

题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c 所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。#include #include #include void swap(char *str,int i,int j);void fullArray2(char *str,int begin);void fullA

2012-08-26 10:39:53 662

原创 把数组排成最小的数

输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。 * 例如输入数组{32,321},则输出这两个能排成的最小数32132#include #include #include #define MAXLEN 32void pr_strs(char s[][MAXLEN], int len){ int i = 0; for (i = 0; i <

2012-08-23 23:32:20 486

原创 求数组中最长递增子序列

#include #include #include int min(int arr[],int len);int max(int arr[], int len);void pr_arr(int arr[], int len);void pr_mostIncreaseList(int arr[], int MaxCount[], int len, int curi, int

2012-08-23 15:33:57 602

原创 求N!的二进制表示中最低位1的位置 ->求 N!的质因子2的个数

说明:相当于求 N!的二进制表示最后有几个0 (与上篇中求N!十进制表示 最后有几个0 相似)即求 N!的质因子2的个数 == [N/2]+[N/2^2]+[N/2^3]+....然后+1就是得到位置了。(PS:位置从1开始算)求 N!的质因子2的个数的另一个方法:N!含有质因数2的个数,等于N减去N的二进制表示中1的个数#include #include //太大

2012-08-22 16:43:05 2210

原创 求N!(N的阶乘) 中最后有几个0

方法:求N! 中质因子5的个数,即能被5整除多少次。说明:相当于求10的个数==5*2的个数 由于5的个数N!中5的个数==[N/5]+[N/5^2]+[N/5^3]+...//太大的话会溢出的,只能算12!以下。unsigned int factorial(unsigned int n){ if(n==0 || n==1) return 1; else retu

2012-08-22 15:01:03 3470

原创 判断一个整数是不是二的整数次幂 求某个数的二进制中1的个数

方法:i&(i-1) 如二进制1100 && 1011 =1000 相当于去掉最右边的1//求一个整数中二进制1的个数 --普通方法int Numof1(unsigned int i){ int count=0; while(i) { if(i&1) { ++count; } i>>=1; } return count;}int GetBitNum

2012-08-22 13:37:49 1640

转载 最长公共子序列(LCS)

先介绍LCS问题的性质:记Xm={x0, x1,…xm-1}和Yn={y0,y1,…,yn-1}为两个字符串,而Zk={z0,z1,…zk-1}是它们的LCS,则:1.    如果xm-1=yn-1,那么zk-1=xm-1=yn-1,并且Zk-1是Xm-1和Yn-1的LCS;2.    如果xm-1≠yn-1,那么当zk-1≠xm-1时Z是Xm-1和Y的LCS;3.    如果xm-1

2012-08-20 20:50:30 3950

原创 在从1到n的正数中1出现的次数

题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。当最高位为1时:如:1234 ,1的个数记为f(n)分为两段,1~999,1000~1234 第一段:1~999 的个数 1*3*(10^2); 其中1为最高位,3为(长度-1),2为(长度-2)第二段:1000~1

2012-08-19 23:15:35 1705

原创 求两个整数的最大公约数,算法原理辗转相除法 原理: GCD (x,y) = GCD(y,x%y)

若求:最小公陪数= X*Y / GCD(X,Y)#include #include #include //递归int gcd1( int m, int n){ int r; if(0==(r=m%n)) return n; return gcd1(n,r);}//非递归int gcd2(int m,int n){ while(m!=0 && n!=0) { if

2012-08-17 11:10:52 6378

原创 C里面没有引用么?

在ubuntu下测试引用不成功。

2012-08-17 10:40:55 963

原创 随机打印1-100要求不重复

随机打印1-100 的数,每个只能打印一次#include #include //随机打印1-100 void pr_rand(int n){ int i; int a[n]; //init for(i=0;i<n;i++) { a[i]=i+1; } for(i=n-1;i>0;i--) { swap(a,rand()%(i+1),i); } rdump(a

2012-08-17 10:31:45 1129

原创 和为n连续正数序列

输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。方法一:运用(n+m)*(n-m+1)=2K这个公式。 m为第一个值,n为最后一个值,k为m+(m+1)+。。。+n之和。方法二:(这个效率高)用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初

2012-08-16 18:12:23 550

转载 约瑟夫问题(圆圈中最后剩下的数)

题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。首先定义最初的n个数字(0,1,…,n-1)中最后剩下的数字是关于n和m的方程为f(n,m)。在这n个数字中,第一个被删除的数字是m%n-1,为简单

2012-08-15 17:33:11 625

原创 数据循环移位(左右区间交换)

设计一个算法,把一个含有N个元素的数组循环右移K位。要求时间复杂度为O(N)。#include #include void Reverse(char *arr, int b, int e);void RightShift(char *arr, int N, int k);int main(void){ char a[]="abcd1234"; RightShift(a,siz

2012-08-15 16:19:28 1550

原创 输入一个单向链表,输出该链表中倒数第k 个结点。链表的倒数第0个结点为链表的尾指针。

两个指针,第一个先走K步,第二个再和第一个一起走,一直到第一个走到尾结点。那第二个指针的位置就是所求。#include #include typedef struct node{ int data; struct node* next;} Node;Node* create_NodeList(int a[],int lenght);Node* find_last(Node *hno

2012-08-14 21:44:56 2907

原创 求和1+2+3+...N

求和1+2+3+...N 要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句.方法一:1+..+n=n*(n+1)/2=(n^2+n)/2所以只要求出N的平方就行。#define T(R,N,i) (N&(1求N的平方#define T(R,N,i) (N&(1<<i)) && (R+=(N<<i))int squa

2012-08-14 17:12:33 3494

原创 ubuntu 防火墙

1,关闭防火墙 ufw disable

2012-08-06 20:41:02 331

转载 pthread 多线程编程

1、概述多线程程序作为一种多任务、并发的工作方式,有以下的优点:  1) 提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。  2) 使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目

2012-08-02 14:52:51 1117

learning opencv 中文版

学习opencv中文版,适合喜欢在电脑上看书查资料的同学

2011-04-27

Eclipse 7.5汉化、注册码、

如题Eclipse 7.5汉化、注册码、,里面有汉化方法。。自己看下。应该没问题的!

2010-10-05

ASP网页制作ppt

这是关于ASP网页制作的课件,需要的下!

2009-03-10

数据库系统概论(第三版)

数据库系统概论(第三版),感觉不错,希望对大家有帮助!

2009-03-08

C语言程序设计教学课件

C语言程序设计教学课件,对于C语言基础不可忽视!

2009-03-06

面向对象程序设计与 Visual C++6.0教程

面向对象程序设计与 Visual C++6.0教程 [陈天华]

2009-03-06

JAVA语言程序设计教学课件

这是JAVA语言程序设计教学课件, 对学习JAVA语言的同学尤其是初 学者来说是很有帮助的!

2009-03-06

Access关系数据库教学课件.rar

这是关系数据库教学课件,是ACCESS的, 简单实用,学起来简单!

2009-03-06

编译程序设计原理第二版习题解析

这是编译程序设计原理第二版习题解析, 希望对大家有所帮助!

2009-03-06

编译原理习题解答 [陈意云的习题集].

这是陈意云的编译原理习题解答,感觉不错, 希望对你有帮助!

2009-03-06

编译程序设计原理[陈火旺]

编译程序设计原理[陈火旺]全文 希望对学习编译原理的同学有帮助!

2009-03-06

酒店餐饮管理系统 (基于C#)

不错的酒店管理系统,功能齐全,对于新手来说好是蛮有帮助的学习!用于其它自用也是可以的,比如说毕业设计等等啦!

2008-09-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除