算法
sophie_wise8
这个作者很懒,什么都没留下…
展开
-
统计数字问题
OItraining POJ1016 一本书的页码从自然数1开始顺序编码直到自然数 n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字 0。例如,第 6 页用数字 6 表示,而不是 06 或 006 等。数字计数问题要求对给定书的总页码 n,计算出书的全部页码中分别用到多少次数字 0,1,2,…,9。 给定表示书的总页码的 10 进制整数 n (1≤n≤109)原创 2012-06-06 20:32:25 · 573 阅读 · 0 评论 -
不用if,?:,等判断语句获得两数之中较大的或较小的数
int getMax(int a,int b){ int num[2]={a,b}; return num[((a>>31 ^ b>>31) & (a>>31 & 1)) | ( !(a>>31 ^ b>>31) & ((a-b)>>31 & 1)) ]; } int getMin(int a,int b){ int num[2]={b,a}; return num[((a原创 2012-08-27 16:25:23 · 918 阅读 · 0 评论 -
搜狗笔试:有两个数,A和B,六种操作分别是+12,-12,+7,-7,+5,-5。A经过若干次操作,变成B
题目描述: 要求选给出思路,然后写代码,可以使用c/c++/java/python或者伪代码描述。 有两个数,A和B,六种操作分别是+12,-12,+7,-7,+5,-5。A经过若干次操作,变成B 是输入任意2个数A和B,要给出变换过程,这其中的操作序列就是一个路径,也就是最少的操作次数 。 思路: 用广度优先搜索穷举,找出最短路径 #include #in转载 2012-09-04 09:45:55 · 2665 阅读 · 0 评论 -
求数组中最大值和最小值 以及 求数组中最大值和次大值 最小比较次数
#include int count1=0; int count2=0; void find_max_min(int* a,int n,int* max,int* min);//1.5n-2 compare void find_max1_max2(int* a,int n,int* max1,int* max2);//n+logn+1 compare int main() { int a[8]=原创 2012-06-20 17:28:42 · 924 阅读 · 0 评论 -
求数组中的逆序对个数,并输出所以的逆序对
利用归并排序 代码如下 #include #include #include //int count=0; int merge(int* a,int first,int mid,int last,int* temp) { int i=mid,j=last; int k,count=0;; int index=last-first; while(i>=first && j>=mid+1原创 2012-06-20 20:43:28 · 651 阅读 · 0 评论 -
循环赛日程表
http://www.cnblogs.com/liushang0419/archive/2011/09/19/2181402.html 对于书上那个日程表的实现,第三版的课本给出了循环实现的方法,不过这个表的生成明显要用递归方法生成更为合适,此表如下: 可以看到每次该表的生成总可以分成四个字表的填充过程,初始化让左边第一列填充上之后,然后每一次先递归填充左上角的子表,然后再转载 2012-06-18 16:51:49 · 599 阅读 · 0 评论 -
子数组合并
问题描述: 设子数组a[0:k-1]和a[k:n-1]已排好序(0 思路: 首先用二分搜索算法在数组段a[k:n-1]中搜索a[0]的插入位置,即找到位置p使得a[p] 例int a[7]= {7,9 ,11,13,6,8,10} k=4,a[0]在a[k:6]的插入位置为p=4; 将数组段a[0:p]循环左移p-k+1=4-4+1=1个位置得到 a[7]={6,原创 2012-06-18 15:48:21 · 3671 阅读 · 2 评论 -
归并排序(递归实现+非递归实现+自然合并排序)
http://www.cnblogs.com/liushang0419/archive/2011/09/19/2181476.html 归并排序的确是分治思想的经典代表。写了很多次,这次又有新的收获,过去用的是递归的实现方式,理论上任何用递归方法实现的代码都可以转换为非递归的形式,所以此例也不例外。然后再用非递归的实现方法上进行改进,完成了“自然归并”算法,这比直接归并效率要高一些。转载 2012-06-18 16:41:57 · 7453 阅读 · 2 评论 -
主元素问题
http://blog.sina.com.cn/s/blog_4ae8f77f0100uptr.html 主元素问题 算法设计与分析 时间复杂度nlogn和n (2011-10-03 01:45:31) 转载▼ 一、主元素问题 设T[0..n-1]是n个元素的数组。对任一元素x,设S(x)={i|T[i]=x}。当|S(x)|>n/2时,称x为T的主转载 2012-06-18 11:36:47 · 5878 阅读 · 0 评论 -
分治法实现大整数乘法
http://blog.csdn.net/zhanghua1816/article/details/6413083 /* * 利用分治法实现大整数乘法 * 作者:张华 * 指导老师:黄新艳老师 * 完成日期:2011年4月27日 */ #include #include #include using转载 2012-06-16 16:17:54 · 12469 阅读 · 0 评论 -
大整数的加减乘除
/*大整数运算*/ #include #include #include #define MAX 100 char* add(char* a,char* b); char* sub(char* a,char* b); char* mul(char* a,char* b); char* div(char* a,char* b); bool isValid(char* a,int n); char*原创 2012-06-16 15:42:13 · 1066 阅读 · 0 评论 -
排列问题
设R={r1,r2...,r n}是要进行排列的n个元素,Ri=R-{ri},集合R中元素的全排列记为Perm(R) , (ri)Perm(R)表示在全排列Perm(R)的每一个排列前加前缀ri得到的全排列。R的全排列可归纳定义如下: 当n=1时,Perm(R)=(r),其中r是集合R中唯一的元素 当n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),.....,(r原创 2012-06-12 22:12:29 · 302 阅读 · 0 评论 -
金币阵列问题
问题描述: 有m*n(1 ≤ m, n ≤ 100)个金币在桌面上排成一个 m 行 n 列的阵列。每一枚金币或正面朝上或背面朝上。用数字表示金币状态,0表示金币正面朝上,1 表示背面朝上。 金币阵列游戏的规则是: 1. 每次可将任一行金币翻过来放在原来的位置上; 2. 每次可任选 2 列,交换这 2 列金币的位置。 本题要求对于给定的金币阵列初始状态和目标状态,编程计算按金币游戏规原创 2012-06-07 15:12:54 · 604 阅读 · 0 评论 -
众数问题
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。 例如,S={1,2,2,2,3,5}。 多重集S的众数是2,其重数为3。 对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。 Input 输入的第1行多重集S中元素个数n;接下来的n 行中,每行有一个自然数,值在整数范围内 Output原创 2012-06-25 16:33:57 · 9338 阅读 · 0 评论