编程之美
scgillian
这个作者很懒,什么都没留下…
展开
-
编程之美3.10扩展问题
#include#includeusing namespace std;struct Node{ int data; Node* lchild; Node* rchild;};void PrintNodeByLevel(Node *root){ if(root==NULL) return; vector vec; vec.pus原创 2012-02-22 22:14:32 · 1016 阅读 · 0 评论 -
编程之美4.4点是否在三角形内扩展问题
不包括点在边线上的情况,判断点是否在三角形内,仍然用面积法进行判断边线上的情形用向量平行的判定条件设向量AB(x1,y1),向量AD(x2,y2)若x1y2-x2y1==0则这两向量平行,表面D要么在边线上要么在三角形外均属于不在三角形内的情形其余的判定为点D与三边围成的面积之和是否等于三角形ABC的面积三角形的面积用海伦公式计算#include#include原创 2012-12-30 20:00:04 · 1669 阅读 · 0 评论 -
编程之美2.14求子数组之和的最大值
分而治之的思想(divide and conquer)#includeusing namespace std;int max(int a,int b){ return (a>b)?a:b;}int MaxSum(int *A,int low,int high){ //leftMax记录数组左半边最大的值 //rightMax记录数组右半边最大的值 int leftMax,rig原创 2012-03-01 12:48:33 · 1077 阅读 · 0 评论 -
编程之美2.8找符合条件的整数
p157有这样一段话,表2-1计算110 % 3是多余的。原因是1和10对3的余数相同,所以101和110对3的余数相同,那么只需要判断101是否可以整除3就可以了,而不用判断110是否能整除3。110=100+10,101=100+1根据同余定律 如果a≡x(mod d),b≡m(mod d),则 4)a+b≡x+m (mod d)即1≡10(mod 3),原创 2012-12-10 16:32:26 · 1939 阅读 · 0 评论 -
编程之美2.1扩展问题2
先对AB两数进行异或运算,那么A,B位不同的结果位中为1,位相同的结果位上为0。异或运算后便转化成了求1的个数问题参考http://hi.baidu.com/azuryy/item/be4fd72c77cef4d00e37f9d3int count(int A,int B){int num=0;int v=A^B;while(v){v=v&(v-1);num++;}转载 2012-11-24 11:57:07 · 901 阅读 · 0 评论 -
编程之美24点游戏感悟
解法二用数字i代表集合,比如i=15,表示成二进制位1111,代表a1,a2,a3,a4均在集合中(x&i)==x则x为i子集因为若x&i==x 则x与i的二进制表示中x为1的位i必为1,x为0的位,i可为0或1,又x代码参考了http://blog.csdn.net/suwei19870312/article/details/5830373原创 2012-11-22 17:06:55 · 2722 阅读 · 0 评论 -
编程之美2.4扩展问题
同之前问题1的分析,二进制数1101十位为0,十位出现1的有11,10,111,110,1011,1010推理若某位为0,则该位出现1的次数由高位数字(11)*当前位数(10即2^1)决定二进制数1111十位为1,十位出现1的有11,10,111,110,1011,1010,1110,1111推理若某位为1,则该位出现1的次数由高位数字(11)*当前位数(10即2^1)加上低位数字+1原创 2012-11-27 22:17:04 · 1643 阅读 · 2 评论 -
编程之美2.2不要被阶乘吓倒
除了1!的阶乘外,其余数的阶乘均为偶数设N! 设 ,cm为某个自然数。N不等于1时Cm>=1,当N!表示成二进制位时候,m+1位必为1。所以此问题等同于求N!中可以表示成求中的m的值,结果为m的值加1int lowestOne(int N){int Ret =0;while(N){N>>=1;Ret+=N;}return Ret;}原创 2012-11-27 14:22:33 · 727 阅读 · 0 评论 -
编程之美2.3寻找发帖水王扩展问题
与之前同意的思路,只不过现在需设置3个candidate变量。若与此3个candidate的id均不相同,则count-1。#includeusing namespace std;const int N=16;class Type{public: Type(){count=0;id=-1;} int count; int id;};int main(){ int I原创 2012-11-27 15:56:00 · 1651 阅读 · 0 评论 -
编程之美1.8小飞的电梯调度算法扩展问题
设有N2个乘客在第i层下,N1个乘客的目的地楼层在第i层以下,N3个乘客的楼层在第i层以上假设电梯从停在i层改停在为i+1层,停在第i层时消耗的总能量为E则改为i+1层停之后原先i层以上的乘客即N3个乘客少往上爬一层,原先第i层的N2个乘客需多往下爬一层,原先第i层以下的N1个乘客需多往下爬一层。所需总能量变为E-N3*K+N1+N2若N3*K>(N1+N2),则停在i+1层好原创 2012-11-05 20:35:36 · 2093 阅读 · 0 评论 -
编程之美2.10扩展问题求数组中第二大数
要求求得数组中第二大数采用分治思想解决这个问题 #includeusing namespace std;//分治思想求数组中第二大的数//low为数组低位索引,high为数组高位索引void search(int *a,int low,int high,int *max,int *smax){ //max为最大的数,smax为数组中第二大的数 if(high-lo原创 2012-02-29 18:13:03 · 2882 阅读 · 2 评论 -
编程之美3.4扩展问题
编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来 思路:只要把节点的下一个节点指针指向该节点的上一个节点即可,原来头结点的下一个节点指针置为空,返回新的节点即可 #includeusing namespace std;typedef struct node{ int data; node * next;}Node;Node *原创 2012-02-20 22:30:29 · 978 阅读 · 0 评论 -
编程之美2.21
题目: 写一个程序,输出它所有可能的连续自然数之和的算式 分析:假设可以写成连续i个自然数之和,假设这个序列第一个自然数为j,即为j , j+1,j+2,j+3...j+i-1,这个序列为等差数列,和为i[(i-1)/2+j]即数n要表示成i[(i-1)/2+j]的形式。首先要判断(n-i*(i-1)/2)%i==0,i*(i-1)/2肯定可以整除,因为i至少为2,i*(i-1)/2用原创 2012-02-24 13:16:58 · 2196 阅读 · 0 评论 -
编程之美3.1字符串移位包含的问题的扩展问题
给定两个字符串是s1和s2,要求判定s2是否能够被s1做循环移位(rotate)得到的字符串包含。例如给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false 我的思路是这样的:找出s2中第一个字符在s1的位置记为p1,找出s2中最后一个字符在s1中可能的位置记为p2,计算所有的p1与p2间的差值,若等于s2的长度,则比较p1与p2间的字符串与原创 2012-02-23 20:04:57 · 1140 阅读 · 0 评论 -
编程之美4.3买票找零
解法二的笔记:存在某个k,使序列前k项中1的个数比0的个数刚好小1?假设不存在这样的k,那么由于是非法序列那么k=2n-1时,1的个数至少比0小于2,这样无论第2n个数取0还是取1,0和1的总个数均不会相等,所以假设不成立。必存在k使序列前k项中1的个数比0的个数刚好小1原创 2012-12-31 17:16:43 · 1257 阅读 · 0 评论