11 2012 档案

摘要:1、整型数V的二进制中1的个数//普通解法:除以2,看余数int Count(int v){ int num = 0; while(v) { if(v % 2 == 1) ++ num; v /= 2; } return num;}//使用位移int Count(int v){ int num = 0; while(v) { num += v & 1; v >>= 1; } return num;}位移的思路,当输入i是正数时没有问题,但当输入的i是一个负数... 阅读全文
posted @ 2012-11-20 17:00 阿凡卢 阅读(946) 评论(0) 推荐(0) 编辑
摘要:1、最长公共子序列、最长公共子串最长公共子序列(Longest-Common-Subsequence,LCS)dp[i][j]:dp[i][j]表示长度分别为i和j的序列X和序列Y构成的LCS的长度dp[i][j] = 0,如果i=0 或 j=0 dp[i][j] = dp[i-1][j-1] + 1,如果 X[i-1] = Y[i-1] dp[i][j] = max{ dp[i-1][j], dp[i][j-1] },如果 X[i-1] != Y[i-1]LCS长度为 dp[Xlen][Ylen]View Code int dp[100][100]; // 存储LCS长度, 下标i,j表示. 阅读全文
posted @ 2012-11-15 15:37 阿凡卢 阅读(5711) 评论(3) 推荐(2) 编辑
摘要:1、一个楼梯有20级,每次走1级或是2级,从底走到顶一共有多少中走法?算法: 设 n 是阶数,f(n) 是上 n 阶的不同走法数,则第一步可以走一阶或者是两阶, 那么这三种情况下剩余的阶数分别为 n-1、n-2, 所以 f(n) = f(n-1) + f(n-2)。//递归解法int solution1(int n){ if(n == 0 || n == 1) return 1; else return solution1(n-1) + solution1(n-2);}//非递归解法int f[100];int solution2(int n){ f[0] = 1; f... 阅读全文
posted @ 2012-11-14 13:18 阿凡卢 阅读(5366) 评论(0) 推荐(1) 编辑
摘要:1、写一个函数找出一个整数数组中第二大的数。 2、寻找平衡点问题 平衡点:比如int numbers[]={1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点。假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点,要求返 阅读全文
posted @ 2012-11-13 12:50 阿凡卢 阅读(2440) 评论(1) 推荐(1) 编辑
摘要:1、字符串移位包含问题//普通解法bool contain_check(){ char s[6] = "AABCD"; char d[5] = "CDAA"; int len = strlen(s); for(int i=0; i size) { size = n[*s+128]; ch = *s; } s++; } }}3、给一个字符串,有大小写字母,要求写一个函数把小写字母放在前面,大写字母放在后面,尽量使用最小的空间、时... 阅读全文
posted @ 2012-11-12 13:02 阿凡卢 阅读(8025) 评论(5) 推荐(2) 编辑
摘要:题目:输入两棵二叉树A和B,判断树B是不是A的子结构bool IsChildTree(Node * father, Node * son){ if(father == NULL && son == NULL) return true; if(father == NULL && son != NULL) return false; if(father != NULL && son == NULL) return true; //如果当前结点相同,判断左右子树是否子结构 if(father->data == son->... 阅读全文
posted @ 2012-11-11 14:20 阿凡卢 阅读(1812) 评论(0) 推荐(0) 编辑
摘要:链表: 1、注意是否有带头结点。 2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。单链表插入、删除操作需要寻找前驱结点。 3、双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表在删除不需要遍历。 一、判断两个链表是否相交:(假设两个链表都没有环) 1、判断 阅读全文
posted @ 2012-11-10 15:24 阿凡卢 阅读(2580) 评论(0) 推荐(0) 编辑
摘要:Q:关于结构体的对齐,到底遵循什么原则?A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况:#include <stdio.h>#include <string.h>#define PRINT_D(intValue) printf(#intValue" is %d\n", (intValue));#define OFFSET(struct,member) ((char *)&((struct *)0)->member - (char *)0)#pragma pack(1)typedef struct{ char sex; 阅读全文
posted @ 2012-11-09 13:15 阿凡卢 阅读(18719) 评论(5) 推荐(1) 编辑
摘要:Q:printf和scanf的返回值是什么?int main() { int i = 43; int n = printf("%d\n",i); printf("%d\n",n); return 0;} A:printf函数返回3,因为其输出了'4', '3', '\n' 三个字符。printf返回的是成功输出到STDOUT的字符数。如果发生错误,返回一个负数。scanf返回的是成功赋值的变量个数,如果发生错误,返回EOFQ:既然fgetc是接收输入的字符,返回值用char或者unsigned char不就 阅读全文
posted @ 2012-11-08 20:00 阿凡卢 阅读(3605) 评论(3) 推荐(0) 编辑
摘要:#include <iostream>using namespace std;class A{public: A() { print(); } void fun() { print(); } virtual void print() { cout<<"A::print()"<<endl; } int m;};class B: public A{public: virtual void print() { cout<<"B::print()"<<endl; }}i... 阅读全文
posted @ 2012-11-07 20:24 阿凡卢 阅读(1251) 评论(0) 推荐(0) 编辑