摘要: Q:如果一个整数能够表示成两个或多个素数之和,则得到一个素数和分解式。对于一个给定的整数,输出所有这种素数和分解式。注意,对于同构的分解只输出一次(比如5只有一个分解2 + 3,而3 + 2是2 + 3的同构分解式)。 例如,对于整数8,可以作为如下三种分解: (1) 8 = 2 + 2 + 2 + 2 (2) 8 = 2 + 3 + 3 (3) 8 = 3 + 5 A:... 阅读全文
posted @ 2012-07-16 16:21 Cavia 阅读(947) 评论(1) 推荐(0) 编辑
摘要: Q:求一个数组的最长递增子序列 A:数组为arr[n] 一个O(n^2)的算法 利用动态规划,利用一个辅助数组b[n],b[i]为对应以arr[i]结尾的最大递增子序列的长度,初始b[0]=1。从arr[1]到arr[n-1]的每次遍历中,设element=arr[i],考虑从当前索引i往前的所有索引j,如果element>arr[j],则当前element有可能扩展成一个新的递增子序... 阅读全文
posted @ 2012-07-16 14:49 Cavia 阅读(331) 评论(0) 推荐(0) 编辑
摘要: Q:1-1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次.每个数组元素只能访问一次,设计一个算法,将它找出来;不用辅助存储空间 A: 方法一: 将1001个数加起来,再减去1+2+3+…+1000,不过这种方法不通用,容易溢出。 方法二: 将1001个数异或,然后和1^2^3^…^1000的结果进行异或,最后的结果就是要求的数。 阅读全文
posted @ 2012-07-16 13:22 Cavia 阅读(397) 评论(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) 编辑