02 2014 档案

摘要:问题:1.输入int 20,其二进制为10100,按位输出10100;2.或者将1转化为“+”,0转化为“-”,输出就是” + - + - - “;int biTofh(int bi,int len){//二进制转化为正负号 int i=0; while(i<len){ int tmp = 1; if((bi & (tmp<<(len-i-1))) != 0){//从最左位开始比较,该位是1 printf(" + "); } ... 阅读全文
posted @ 2014-02-26 00:28 McQueen1987 阅读(1128) 评论(0) 推荐(0)
摘要:问题描述:在1,2,3,4,5中任意添加正负号,使结果等于3.例如:±1±2±3±4±5=3;解决方案:写出递归方程:1:f(n)表示添加数A(n)后得到结果B(n):比如n=1时,f(1)就是添加A(0)=1后B(n)={{1,+},{-1,-}};2:f(n+1)表示添加数A(n+1)后得到结果B(n+1):比如n=2时,f(2)就是添加A(1)=2后B(n+1)= {{1+2=3,++},{1-2=-1,+-},{-1+2=1,-+},{-1-2=-3,--}};3:其中符号++ ;+- ;用四位二进制数表示+为1,-为0。+-+-+即1 阅读全文
posted @ 2014-02-26 00:22 McQueen1987 阅读(980) 评论(2) 推荐(0)
摘要:问题描述:输入一个字符串,输出该字符串中最大对称子串的长度。例如输入字符串:“avvbeeb”,该字符串中最长的子字符串是“beeb”,长度为4,因而输出为4。解决方法:中序遍历一,全遍历的方法:1.全遍历的方法,复杂度O(n3);2.遍历原字符串的所有子串,然后判断每个子串是否对称;实现方法是:我们让一个指针i从头至尾遍历,我们用另一个指针j从j=i+1逐一指向i后面的所有字符。就实现了原串的所有子串的遍历(子串为指针i到j中间的部分);最后判断得到的子串是否对称即可;二,此外还有个巧妙的方法,值得和大家分享一下(这是自己想的哦,转载请注明出处):原串是str1=“avvbeeb”,将其翻转 阅读全文
posted @ 2014-02-23 23:47 McQueen1987 阅读(4231) 评论(3) 推荐(2)
摘要:想把算法描述清楚真是件费时费力费脑筋的事情啊,下面算法描述部分源自以下连接:http://www.cnblogs.com/zhangchaoyang/articles/2012070.html最长公共子串(LCS)找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。其实这又是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:"bab"和"caba"(当然我们现在一眼就可以看出来最长公共子串是"ba"或"ab") b a bc 0 0 0a 阅读全文
posted @ 2014-02-19 17:15 McQueen1987 阅读(225) 评论(0) 推荐(0)
摘要:想把算法描述清楚真是件费时费力费脑筋的事情啊,下面的算法描述部分源自以下连接:http://www.cnblogs.com/zhangchaoyang/articles/2012070.html感谢哥么写的文字描述的很清晰;我用两种方式实现“最长公共子序列”算法:1.动态规划的顺序实现;2.动态规划的递归实现;3.都用c实现,linux平台编译,代码附在文章末尾; 最长公共子序列最长公共子序列与最长公共子串的区别在于最长公共子序列不要求在原字符串中是连续的,比如ADE和ABCDE的最长公共子序列是ADE。我们用动态规划的方法来思考这个问题如是求解。首先要找... 阅读全文
posted @ 2014-02-19 16:27 McQueen1987 阅读(1906) 评论(0) 推荐(0)
摘要:目的:主要是练习c里面单链表的实现,递归思想复习;#include #include typedef struct _Node{//定义单链表的节点 int value; struct _Node *next;}Node;Node* link(int len){//新建一个单链表 int i=0; Node* head = (Node*)malloc(sizeof(Node)); head->value = -1; Node* tail = head; for(;ivalue=i; ... 阅读全文
posted @ 2014-02-18 17:19 McQueen1987 阅读(671) 评论(0) 推荐(0)
摘要:问题给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱)。例如:给定一个长度为6的数组A{5, 6, 7, 1, 2, 8},则其最长的单调递增子序列为{5,6,7,8},长度为4.解决方案:1,新建一个二维数组ret[ ][ ];以数组A[ ]={2 , 1 , 5 , 9}为例: ~ 2 1 5 90 0 0 0 0 0 //为了方便计算,第0行第0列均设为01 0 2 1 1 1 2 0 E 5 5 //第2行表示子串长度为2,该位置及前面元素的长度为2的最长递增子序列3 0 E 9... 阅读全文
posted @ 2014-02-18 17:08 McQueen1987 阅读(983) 评论(0) 推荐(0)
摘要:问题描述 :从一组数字中,找出其所有连续子序列中,和数(子序列所有数字求和)最大的连续子序列:如:数组 int A[ ] = {-4 , 3 , 5 , -1};找出某几个连续的子序列其和最大。比如A0+A1 = -1 。A1+A2+A3+A4 = 3。而A2+A3=8;则A2 A3组成的数组即是所... 阅读全文
posted @ 2014-02-17 14:01 McQueen1987 阅读(3776) 评论(0) 推荐(0)
摘要:原型:char *itoa(int value,char *string) 功能:将整数value转换成字符串存入string,默认为十进制; 说明:返回指向转换后的字符串的指针 #include#include#include#include#include#define SWAP(a,b) (a)^=(b);(b)^=(a);(a)^=(b) char* strReverse(char* str){ assert(str!=NULL);//if(NULL == str) return; char *front,*rear; front=re... 阅读全文
posted @ 2014-02-15 00:01 McQueen1987 阅读(2058) 评论(0) 推荐(0)
摘要:说明: 原型:char *strstr(char *haystack, char *needle); 用法:#include 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。 函数myStrstr是我自己写的;函数standardStrstr是标准函数,可对比参考;#include#include#includechar* myStrstr(char srce[],char check[]){ assert(NULL != sr... 阅读全文
posted @ 2014-02-14 17:00 McQueen1987 阅读(353) 评论(0) 推荐(0)
摘要:问题:输入:“how are you baby-- "输出:”woh era uoy --ybab "#include#include#define SWAP(a,b) (a)^=(b);(b)^=(a);(a)^=(b)char* sentenceReverse(char* input){ if(NULL == input) return; char *r,*f; char *inp = (char*)malloc(sizeof(char)*(strlen(input)+1)); //当input是const时其内容不能... 阅读全文
posted @ 2014-02-12 22:47 McQueen1987 阅读(295) 评论(0) 推荐(0)
摘要:实现字符串的原地翻转:#include#include#include#define SWAP(a,b) (a)^=(b);(b)^=(a);(a)^=(b)char* strReverse(char* str){ assert(str!=NULL);//if(NULL == str) return; char *front,*rear; front=rear=str; while(*rear) rear++; rear--; while(rear > front){ SWAP(*... 阅读全文
posted @ 2014-02-12 20:08 McQueen1987 阅读(436) 评论(0) 推荐(0)
摘要:练手代码,适用初级码农:#include#include#includeint count(const char * str){//计算数组长度 if(NULL == str) return -1; int len=0; char const *pt= str; while(*pt++) len++; return len;}int count1(const char* str){//计算数组长度 assert(str!=NULL); const char* pt... 阅读全文
posted @ 2014-02-12 20:04 McQueen1987 阅读(1064) 评论(0) 推荐(0)
摘要:查了下采蘑菇问题,用c写的相当困难,把自己绕进去了。最后发现问题出在:采蘑菇的小姑娘起始位置是在数组之外的,而非数组的起始位置。所以在数组下标上折腾了好久。采蘑菇问题描述引用以下博客:http://blog.chinaunix.net/uid-26456800-id-3194477.html【描述】萌萌走出山路后,来到一片草地,发现过了草地有巨型蘑菇,于是他准备采摘一些。但是他对保护花草却很重视,他不忍心踩死花草,但为了蘑菇,他只能尽量少踩死几株。现在,草地上也像一条路,上面有n个点,第N个点就是巨型蘑菇所在地(上面没草),每个点上都有i株小草或j株蘑菇(也就是说有蘑菇就没有草),他每次最多跨 阅读全文
posted @ 2014-02-11 18:06 McQueen1987 阅读(382) 评论(0) 推荐(0)
摘要:装书包问题:从不同重量书中选任意本装入书包,刚好达到书包限重;1,mony[ ]存放多种不同重量的书;2,书包限重sum;3,从mony[ ]中选取任意组合,使总重恰好等于sum;4,输出所有可能组合;#include#includeint sum=10;//计算mony中所有能组成sum的元素组合,元素不得重复,输出所有组合情况//start为遍历数组mony[]的起始位置:void FUN(int mony[],int len,int ret[],int start){//len是mony长度 if(ret[len]>sum) return; if(ret[le... 阅读全文
posted @ 2014-02-05 00:19 McQueen1987 阅读(399) 评论(0) 推荐(0)
摘要:问题:1.加入输入是{a,b,c};2.输出abc,acb,bac,bca,cab,cba;代码描述:1.递归遍历所有情况2.方法FUN输入为:要排列的字符串char inp[];inp[]的长度len;排列后结果存入ret[];#include#include#include//count the number of elements in inp[] without '0';int count(char inp[],int len){ int i=0;int sum=0; for(;i<len;i++){ if(inp[i]!=0)... 阅读全文
posted @ 2014-02-04 20:45 McQueen1987 阅读(358) 评论(0) 推荐(0)
摘要:问题描述:如何用货币系统中的货币来构造一个确定的面值,有多少种不同的方法?举例来说, 使用一个货币系统 {2,3,5}产生 10元单位面值的一些可能的方法是:5x2; 5x1+2x1+3x1;3x2+2x2;2x5……等等写一个程序来计算有多少种方法用给定的货币系统来构造一个确定的面值?最少需要多少张货币?先写一个简单的程序:1、货币系统面值为3元,5元和7元;2、能否用上述面值组成总值为19的钱数?写两种方法:1.递归方法:用总值19递归减去面值{3,5,7};结果恰好=0则true,#includeint cash(int sum,int v1,int v2,int v3)//递归,sum 阅读全文
posted @ 2014-02-03 20:43 McQueen1987 阅读(495) 评论(0) 推荐(0)