09 2011 档案

写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷
摘要:题目:写一个函数,求两个整数的之和,要求在函数体内不得使用+、-、×、÷。分析:这又是一道考察发散思维的很有意思的题目。当我们习以为常的东西被限制使用的时候,如何突破常规去思考,就是解决这个问题的关键所在。看到的这个题目,我的第一反应是傻眼了,四则运算都不能用,那还能用什么啊?可是问题总是要解决的,只能打开思路去思考各种可能性。首先我们可以分析人们是如何做十进制的加法的,比如是如何得出5+17=22这个结果的。实际上,我们可以分成三步的:第一步只做各位相加不进位,此时相加的结果是12(个位数5和7相加不要进位是2,十位数0和1相加结果是1);第二步做进位,5+7中有进位,进 阅读全文

posted @ 2011-09-19 15:33 原来... 阅读(719) 评论(1) 推荐(0) 编辑

O(n)时间的排序
摘要:题目:某公司有几万名员工,请完成一个时间复杂度为O(n)的算法对该公司员工的年龄作排序,可使用O(1)的辅助空间。分析:排序是面试时经常被提及的一类题目,我们也熟悉其中很多种算法,诸如插入排序、归并排序、冒泡排序,快速排序等等。这些排序的算法,要么是O(n2)的,要么是O(nlogn)的。可是这道题竟然要求是O(n)的,这里面到底有什么玄机呢? 题目特别强调是对一个公司的员工的年龄作排序。员工的数目虽然有几万人,但这几万员工的年龄却只有几十种可能。上班早的人一般也要等到将近二十岁才上班,一般人再晚到了六七十岁也不得不退休。 由于年龄总共只有几十种可能,我们可以很方便地统计出每一个年龄里有多少名 阅读全文

posted @ 2011-09-19 14:56 原来... 阅读(548) 评论(0) 推荐(0) 编辑

求子数组的最大和
摘要:题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。分析:本题最初为2005年浙江大学计算机系的考研题的最后一道程序设计题,在2006年里包括google在内的很多知名公司都把本题当作面试题。由于本题在网络中广为流传,本题也顺利成为2006年程序员面试题中经典中的经典。如果不考虑时间复杂度,我们可以枚举出所有子数组并求出他们的和。不过非常遗憾 阅读全文

posted @ 2011-09-19 11:27 原来... 阅读(407) 评论(0) 推荐(0) 编辑

拷贝构造函数的参数为什么必须使用引用类型
摘要:转自:http://blog.csdn.net/tunsanty/article/details/4264738在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识。 但是如果我问你“拷贝构造函数的参数为什么必须使用引用类型?”这个问题, 你会怎么回答? 或许你会回答为了减少一次内存拷贝? 很惭愧的是,我的第一感觉也是这么回答。不好还好,我有理性这个好品质。思索一下以后,发现这个答案是不对的。让我来撕开(有点暴力,但是我喜欢,嘿嘿--龇牙)那件隐藏在真理外的小裤衩,让它袒露在“登徒子”们的眼前吧。先从一个小例子开始:(自己测试一下自己看看这个程 阅读全文

posted @ 2011-09-18 19:02 原来... 阅读(17741) 评论(1) 推荐(8) 编辑

程序员面试题精选题C++面试题
摘要:网络转载请注明出处http://zhedahht.blog.163.com/。整理出版物请和作者联系。题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量)。请问:能不能同时用static和const修饰类的成员函数?分析:答案是不可以。C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数const this*。但当一个成员为static的时候,该函数是没有this指针的。也就是说此时static的用法和static是冲突的。我们也 阅读全文

posted @ 2011-09-18 16:41 原来... 阅读(20021) 评论(0) 推荐(0) 编辑

给文件或者文件夹改名
摘要:比如把 E:\正则.txt 改成 E:\正则.c#include <stdio.h> int main(void) { char oldname[80], newname[80]; /* prompt for file to rename and new name */ printf("File to rename: "); gets(oldname); printf("New name: "); gets(newname); /* Rename the file */ if (rename(oldname, newname) == 0) . 阅读全文

posted @ 2011-09-17 19:54 原来... 阅读(361) 评论(0) 推荐(0) 编辑

TCP三次握手及四次挥手详细图解
摘要:相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。因此在这里详细解释一下这两个过程。TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 阅读全文

posted @ 2011-09-15 15:35 原来... 阅读(402) 评论(0) 推荐(0) 编辑

大小字节序
摘要:大字节序:把高有效位放在低地址段,例如在按字节寻址的存储器中往地址 0x0001 存放值 0x12345678,在存储器中为 地址 数值 0x0004 0x78 0x0003 0x56 0x0002 0x34 0x0001 0x12小字节序:把低有效位放在低地址段,例如在按字节寻址的存储器中往地址 0x0001 存放值 0x12345678,在存储器中为 地址 数值 0x0004 0x12 0x0003 0x34 0x0002 0x56 0x0001 0x78现在主流的CPU,intel系列的是采用的little endian的格式存放数据的。 阅读全文

posted @ 2011-09-15 15:24 原来... 阅读(2069) 评论(0) 推荐(0) 编辑

栽了两次的题--不要忘记
摘要:#include<iostream>using namespace std;struct A{char c;short s;char cc;long l;}*pAbc;int main(){pAbc=(struct A *)0x100000;printf("%x\n",pAbc+0x100);printf("%x\n",(unsigned long)pAbc+0x100);printf("%x\n",(char *)pAbc+0x100);printf("%x\n",(unsigned long *)p 阅读全文

posted @ 2011-09-15 15:20 原来... 阅读(2101) 评论(0) 推荐(1) 编辑

C语言为什么不做数组下标越界检查
摘要:1、为了提高运行效率,不检查数组下表越界,程序就可以跑得快。因为C语言并不是一个快速开发语言,它要求开发人员保证所有逻辑的正确性。所以至少到目前为止,C语言是所有高级语言中速度最快,效率最高的。几乎所有对性能有苛刻要求的场合都使用C语言。 2、不检查下标是为了给程序员更大的空间,也为指针操作带来更多的方便。如果有这个检查的话指针的功能将会大大被削弱,C的数组标识符,里面并没有包含该数组长度的信息,只包含地址信息,所以语言本身无法检查,只能通过编译器检查,而早期的C语言编译器也不对数组越界进行检查,只能由程序员自己检查确保。以及在早期的CRT函数中也不对字符串指针或数组进行越界检查,都是要求程序 阅读全文

posted @ 2011-09-15 12:44 原来... 阅读(6111) 评论(0) 推荐(0) 编辑

一个漂浮的FUCK
只有注册用户登录后才能阅读该文。

posted @ 2011-09-11 23:08 原来... 阅读(25) 评论(0) 推荐(0) 编辑

为什么计算机采用二进制而不是八进制或者十六进制
摘要:电子计算机能以极高速度进行信息处理和加工,包括数据处理和加工,而且有极大的信息存储能力。数据在计算机中以器件的物理状态表示,采用二进制数字系统,计算机处理所有的字符或符号也要用二进制编码来表示。用二进制的优点是容易表示,运算规则简单,节省设备。人们知道,具有两种稳定状态的元件(如晶体管的导通和截止,继电器的接通和断开,电脉冲电平的高低等)容易找到,而要找到具有10种稳定状态的元件来对应十进制的10个数就困难了。二进制数的基数是2,只有0和1两个数字,逢2进1。十进制数有0,1,…9十个数字,逢10进1。因为二进制最简单,只有0和1,计算的速度也是最快的,和计算机追求的速度不谋而合,而十六进制, 阅读全文

posted @ 2011-09-11 21:19 原来... 阅读(3189) 评论(0) 推荐(0) 编辑

正则表达式 提取符合要求的字符
摘要:在分析某个C++源文件的过程中,有这样一行变量定义式: int t_from=20,t_to=12,t_length=120,i_count,t_usetime; 现在你并不知道这行一共定义了多少个变量,以及哪些变量进行了初始值设定,要求从该语句中解析出所有以“t_”开头的变量名,并且如果该变量赋予了初始值的话也需要提取出来,请构造一个方法来实现该要求。#include<iostream>#include<string>#include"boost/regex.hpp"using namespace std;using namespace boost 阅读全文

posted @ 2011-09-11 09:30 原来... 阅读(842) 评论(0) 推荐(0) 编辑

求符合指定规则的数 d(n) = n + n的各位之和
摘要:求符合指定规则的数给定函数d(n) = n + n的各位之和,n为正整数,如 d(78) = 78+7+8=93。 这样这个函数可以看成一个生成器,如93可以看成由78生成。 定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。 输出: 1 3 … #include<iostream>using namespace std;int d(int i){int j=i;int sum=0;while(i!=0){sum+=i%10;i/=10;}sum=sum+j;//cout<<"sum 阅读全文

posted @ 2011-09-09 11:23 原来... 阅读(494) 评论(0) 推荐(0) 编辑

两个已排序的整型数组,求交集,最快算法
摘要:运用归并排序的思想,实现这个求交集!#include<iostream>using namespace std;void merge(int a[],int b[],int n,int m){int i=0,j=0;while(i<n&&j<m){if(a[i]==b[j]){cout<<"两个数组中重复的数字其中一个是:"<<a[i]<<endl;i++;j++;}else if(a[i]>b[j]){j++;}else i++;}}int main(){cout<<" 阅读全文

posted @ 2011-09-09 10:12 原来... 阅读(3955) 评论(2) 推荐(1) 编辑

归并排序--详解
摘要:归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1)合并过程 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小的记录复制到R1[p]中,然后将被复制记录的指针i或j加1,以及指向复制位置的指针p加1 阅读全文

posted @ 2011-09-09 09:53 原来... 阅读(3108) 评论(0) 推荐(0) 编辑

C++ cout 输出 16, 8 , 2进制
摘要:C++ cout 输出 16, 8 , 2进制#include <iostream>#include <iomanip>#include <bitset>using std::bitset;using std::hex;using std::oct;using std::cout;using std::cin;using std::endl;int main(){int a=10;cout<<"Dec:"<<a<<endl;cout<<hex<<"Hex:"& 阅读全文

posted @ 2011-09-08 09:44 原来... 阅读(5087) 评论(0) 推荐(0) 编辑

linux进程控制-wait()
摘要:(转)linux进程控制-wait()#include <sys/types.h> /* 提供类型pid_t的定义 */#include <sys/wait.h>pid_t wait(int *status) 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个 阅读全文

posted @ 2011-09-06 18:31 原来... 阅读(565) 评论(0) 推荐(0) 编辑

C++空类默认函数
摘要:定义一个空的C++类,例如class Empty{}一个空的class在C++编译器处理过后就不再为空,编译器会自动地为我们声明一些member function,一般编译过去就相当于class Empty{public:Empty(); // 缺省构造函数Empty( const Empty& ); // 拷贝构造函数~Empty(); // 析构函数Empty& operator=( const Empty& ); // 赋值运算符Empty* operator&(); // 取址运算符const Empty* operator&() const; 阅读全文

posted @ 2011-09-06 10:37 原来... 阅读(1735) 评论(0) 推荐(0) 编辑

彻底搞定C指针-函数名与函数指针
摘要:(本文转自网络:对文中的观点,本人有怀疑,但具体的原因暂时还说不上来,文中的观点也不能说服我。但没办法了,先留着,以后再逐步提高吧!不过,有人这样说:函数名就是函数名,只是在编译过程中,当函数名被使用时总是由编译器把它转换为函数指针,使用&只是显示的说明了编译器将隐式执行的任务 ,有一定道理,只是我目前的知识还不能够确认是否正确,期待....................................)函数名与函数指针一 通常的函数调用一个通常的函数调用的例子://自行包含头文件void MyFun(int x);//此处的申明也可写成:void MyFun( int );int 阅读全文

posted @ 2011-09-03 19:48 原来... 阅读(5130) 评论(0) 推荐(1) 编辑

C++ 实现动态定义三维内的数组
摘要://动态定义一维数组、二维数组、三维数组#include<iostream>#include<ctime>using namespace std ;int main(){int hight , row , col ;register int i , j , k ;srand((unsigned)time(NULL)) ;cout<<"输入一维数组的行"<<endl;cin>>row ;//动态定义一维数组int *p1 ; p1 = new int [row] ;//输入一维数组的值for( i = 0 ; i & 阅读全文

posted @ 2011-09-01 22:40 原来... 阅读(12760) 评论(0) 推荐(0) 编辑

A、B、C、D、E五名学生有可能参加计算机竞赛
摘要:A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些 人参加了竞赛: (1)A参加时,B也参加; (2)B和C只有一个人参加; (3)C和D或者都参加,或者都不参加; (4)D和E中至少有一个人参加; (5)如果E参加,那么A和D也都参加。#include<iostream>using namespace std; int main(){ int a,b,c,d,e; for (a=0; a<2; a++) for(b=0; b<2; b++) for(c=0; c<2; c++) for(d=0; d<2; d++) for(e=0; e& 阅读全文

posted @ 2011-09-01 22:05 原来... 阅读(3329) 评论(0) 推荐(0) 编辑

为什么operator<<运算符重载一定要为友元函数呢?
摘要:如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。。。。。而 >>或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。。。。。。就只能申明为友元函数了。。。如果一定要声明为成员函数,只能成为如下的形式:ostream & operator<<(ostream &output){ return output;}所以在运用这个<<运算符时就变为这种形式了:data<<cout;不合符人的习惯。 阅读全文

posted @ 2011-09-01 09:33 原来... 阅读(9390) 评论(0) 推荐(0) 编辑

导航