04 2013 档案

摘要:题目:实现一个函数,要求吧字符串中的所有空格替换成“%20”。例如“hello world " ——> ”hello%20world%20"实际背景:在网络编程中,如果URL参数中含有特殊的字符,如空格、'#'等,导致服务器端无法识别时,就把这些特殊的字符转换成可以识别的字符。规则:%加上十六进制的ascii码,例如‘#’的ascii码是0x23(16进制),就替换成%23,看下图地址栏中,输入“hello#hao" 分析:注意:在c语言中存字符串最后一位是认为”\0“的,例如a[] = "12",那么a的长度为3,a[0 阅读全文
posted @ 2013-04-21 23:12 jihite 阅读(7959) 评论(3) 推荐(2) 编辑
摘要:问题:在一个二维数组中,每行的元素从左到右是递增的,每列元素从上到下是递增的。写一个函数,查找一给定的元素是否在此数组中输入:一个二维数组,和一个待查找的数输出:待查找的数在数组中输出“YES",否则输出”NO"原始思路:最简单思路就是暴力搜索,遍历一遍数组中的元素时间复杂度为O(n2)。但是这样就没有用问题的已知条件(从左到右、从上到下递增),因此不是个好的解法改进1:从第一行开始找,找到待查元素大的,如果还没找到,接着从第二行开始找,直到找到或到最后一个元素为止(如图),但是如果带查找的元素在最后,还得遍历到最后,时间复杂度还是O(n2) 改进2:上来在随机在里面挑一个 阅读全文
posted @ 2013-04-21 00:28 jihite 阅读(2421) 评论(0) 推荐(4) 编辑
摘要:问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?答:printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。下表列出了printf和scanf对 阅读全文
posted @ 2013-04-20 10:58 jihite 阅读(814) 评论(0) 推荐(0) 编辑
摘要:解法一早在公元前300年,欧几里德就在《几何原本》中给出了高效的辗转相除法。欧几里得辗转相除法是现在算法的鼻祖。算法思路(伪代码)function gcd (a, b) while b ≠ 0 t = b b = a mod b //取余 a = t return a算法证明1. 两个数a、b,用a除以b,得 a = bq + r(q是商 r是余数)。若 r等于0,则b为最大公约数,否则,接着往下走2. 证明一点:任何a和b的公约数都是r的公约数。 证明:假设d为a、b的公约数,则a = md b = nd.r= a - bq = ... 阅读全文
posted @ 2013-04-14 23:45 jihite 阅读(968) 评论(0) 推荐(1) 编辑
摘要:先从一个小程序谈起:#include <iostream>#include <string>using namespace std;int main(){ string s1; cin >> s1; cout << s1 << endl; return 0;}看看测试结果:当输入字串“hello”时,输出是“hello”, 正确。但是下面当输入“hello, nihao"时,输出确实”hello,"把空格后面的东西全部忽略掉了。读入规则是这样的:读取并忽略开头所有的空白字符(如空格、换行符、制表符)读取字符直到空白 阅读全文
posted @ 2013-04-11 21:38 jihite 阅读(5449) 评论(0) 推荐(0) 编辑
摘要:int a;while (a != 0) cout << a << endl;之前对上面这上面的理解很肤浅,认为输出cout就是个输出标志,并且有时候忘记是"<<" 还是">>"。现在理解稍微深了些:cin 、 cout 只是个对象而已 C++中输入、输出由标准库iostream库提供的。iostream库的基础是两个命名为istream和ostream的类型,分别表示输入流和输出流。cin是istream类型的对象,cout是ostream类型的对象。<< 、 >> 是重定向符 上 阅读全文
posted @ 2013-04-11 20:51 jihite 阅读(1089) 评论(0) 推荐(1) 编辑
摘要:上篇谈到了用异或来解决,确实是个好方法,时间复杂度为o(n),比例一遍ok,空间复杂度为o(1),只占用一个空间足矣。现在把这个问题升级下:(1)给出n个数,其中有且仅有一个出现了奇数次,其余的都出现了偶数次。用线性时间常数空间找出这个出现奇数次的数(2)给定n个数,其中有且仅有两个出现了奇数次,其余的都出现了偶数次。用线性时间常数空间找出这两个出现奇数次的数原理(原理不是很懂的,先看看上篇)任何数和自己异或为0任何数和0异或为自己异或具有交换律思路(1)一个出现奇数次出现偶数次的一异或为0了,对剩下的奇数次数不造成干扰奇数次(2n+1)的前2n次一异或为0了,对剩下那个数不造成干扰剩下的那个 阅读全文
posted @ 2013-04-04 23:38 jihite 阅读(2308) 评论(8) 推荐(1) 编辑
摘要:问题定义:有2n+1个数,只有一个单着,别的都是成对的,找出这个单着的数。比如:2 1 3 2 1。3是答案。思路一:暴力搜索——每个数都和其他数比较,找不到相同的,就得到了结果。时间复杂度为o(n2)思路二:排序搜索——先给序列排个序,之后从前往后一对一对的找,直到不是成对的为止。时间复杂度,怎么也得o(nlgn)思路三:异或计算,一趟搞定。时间复杂度o(n)直接看思路三:原理:异或操作(^)——(对于位操作)相同为0,相异为1.比如:1^0 = 1, 1 ^1=0这样:两个相同的数异或就为0任何数和0异或为自己(转化到位。1^0 = 1,0 ^0=0)例如:5 ^ 5 = 0 5 ^0 = 阅读全文
posted @ 2013-04-03 22:42 jihite 阅读(2976) 评论(13) 推荐(3) 编辑

点击右上角即可分享
微信分享提示