上一页 1 2 3 4 5 6 ··· 11 下一页
摘要: Q:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次.每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间 A: 方法一: 将1001个数加起来,再减去1+2+3+…+1000,不过这种方法不通用,容易溢出。 方法二: 将1001个数异或,然后和1^2^3^…^1000的结果进行异或,最后的结果就是要求的数。 阅读全文
posted @ 2012-07-16 13:22 Cavia 阅读(395) 评论(0) 推荐(0) 编辑
摘要: Q:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 A:注意判断转向和每次转向的临界。 四个转向:右->下,下->左,左->上,上->右 临界初始(矩阵为mxn):右临界为n-1,下临界为m-1,左临界为0,上临界为1 //定义四个方向enum Direct {Left,Right,Up,Down};void Func(int **matrix,int m,int... 阅读全文
posted @ 2012-07-16 10:13 Cavia 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。比如,A=[1,0] K=21 那么输出结构应该为100。 阅读全文
posted @ 2012-07-11 11:19 Cavia 阅读(130) 评论(0) 推荐(0) 编辑
摘要: Q:n!的末尾有多少个0A:n!=1*2*3*…*n,在质数中只有2*5=10,能够给最后结果末尾贡献0,所以将n!进行质数分解为2^m*…*5^n*…,末尾0的个数就等于min(m,n),又因为2出现的个数肯定多过5出现的个数,所以m>n,因此只需要统计n的个数即可。那么怎么计算n呢,有两种方法。方法1:直接的方法,从1到n,计算每一个数中因子5的个数。int num=0;for(int i=1;i<=n;++i){ int j=i; while(j%5==0) { num++; j=j/5; }}方法2:利用公式,num=[N/5]+[N... 阅读全文
posted @ 2012-07-11 10:07 Cavia 阅读(187) 评论(0) 推荐(0) 编辑
摘要: Q:给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字? A:首先定义长度为1000的数组,将前1000个关键字放置到数组中。然后对于第1001及以后的每一个关键字(设为第n个),这个关键字被选中的概率为1000/n,所以以这个概率来和数组中随机一个元素替换。 //1000/n概率的实现if(rand... 阅读全文
posted @ 2012-07-11 09:25 Cavia 阅读(721) 评论(0) 推荐(0) 编辑
摘要: 初始确定一个开始顶点source,一个空的集合S,用来存储已探索到的顶点,初始化为空,一个队列Q,初始化也为空。 1、将source加入Q中 2、如果Q为空,失败且退出 3、选出Q中的第一个顶点,移出并加入S中,称该顶点为u 4、如果u是目标顶点,获得解决方案,并成功退出 5、否则得到u的所有相邻顶点,进行处理,并将这些相邻顶点加入Q 6、按照启发方式对Q进行排序 7、返回步骤2 ... 阅读全文
posted @ 2012-07-06 09:08 Cavia 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 特权(如能改变当前日期的表示法以及访问控制)是基于用户和组ID的,当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己的用户ID或组ID,使得新ID具有合适的特权或访问权限。当程序需要降低其特权或阻止对某些资源的访问时,也需要更换用户ID或组ID,从而使新ID不具有相应特权或访问这些资源的能力。一般来说我们总是试图使用最小特权(least privilege)。1 #include <unistd.h>2 3 //设置实际和有效用户ID和组ID,若成功则返回0,出错则返回-14 int setuid(uid_t uid);5 6 int setgid(gid_t 阅读全文
posted @ 2012-07-04 17:11 Cavia 阅读(2284) 评论(0) 推荐(0) 编辑
摘要: 当进程调用exec函数时,该进程执行的程序完全替换为新程序,而新程序则从其main函数开始执行,因为调用exec并不创建新进程,所以前后的进程ID并未改变。exec只是用一个全新的程序替换了当前进程的代码段、数据段、堆和栈。 1 #include <unistd.h> 2 3 //若出错则返回-1,若成功则不返回值 4 5 int execl(const char *pathname,const char *arg0,.../*(char*)0*/); 6 7 int execv(const char *pathname,char *const argv[]); 8 9 int e 阅读全文
posted @ 2012-07-04 16:48 Cavia 阅读(268) 评论(0) 推荐(0) 编辑
摘要: 1 #include <sys/wait.h>2 3 //若成功则返回进程ID,若出错则返回-14 pid_t wait(int *statloc);5 6 pid_t waitpid(pid_t pid,int *statloc,int options);当一个进程正常或异常终止时,内核就向其父进程发送SIGCHLD信号。因为子进程终止是一个异步事件,所以这种信号也是内核向父进程发送的异步通知。父进程可以选择忽略该信号,或者提供一个该信号发生时即被调用执行的函数(信号处理程序)。对这种信号的默认动作是忽略它。对任一终止情形,我们都希望终止进程能够通知其父进程它是如何终止的。该终止 阅读全文
posted @ 2012-07-04 15:08 Cavia 阅读(1812) 评论(0) 推荐(0) 编辑
摘要: 进程的正常终止方式有:1、在main函数内执行return语句,等效于调用exit2、调用exit函数,其操作包括调用各个终止处理程序(终止处理程序在调用atexit函数时登记),然后关闭所有标准I/O流3、调用_exit或_Exit函数,为进程提供一种无需运行终止处理程序或信号处理程序而终止的方法。对标准I/O流是否进行冲洗取决于实现。4、进程的最后一个线程在其启动例程中执行返回语句,该线程的返回值不会用作进程的返回值。当最后一个线程从其启动例程返回时,该进程以终止状态0返回5、进程的最后一个线程调用pthread_exit函数,这种情况下进程终止状态总是0进程的异常终止方式有:1、调用ab 阅读全文
posted @ 2012-07-04 14:49 Cavia 阅读(233) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 11 下一页