编程之美
张荣华_csdn
这个作者很懒,什么都没留下…
展开
-
一排石头的游戏1
N块石头排成一行,每块石头有各自固定的位置。两个玩家依次取石头,每个玩家每次可以取其中任意一块石头,或者相邻的两块石头,石头在游戏过程中不能移位(即编号不会改变),最后能将剩下的石头一次取光的玩家获胜。这个游戏有必胜策略吗?已知:石头数量为N,假设两个玩家分别为玩家A和玩家B,且玩家A先取石头。 当N<=2时,玩家A可以直接取完所有的石头,玩家A有必胜策略。 当N=3时,...原创 2018-06-16 00:33:26 · 318 阅读 · 0 评论 -
小飞的电梯调度算法
亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出应停...原创 2018-06-11 08:22:13 · 267 阅读 · 0 评论 -
小飞的电梯调度算法
亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法:由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出应停...原创 2018-06-11 08:22:26 · 309 阅读 · 0 评论 -
寻找最近点对
给定平面上N个点的坐标,找出距离最近的两个点。根据水平方向的坐标把平面上的N个点分成两部分Left和Right。假设分别求出了Left和Right两部分中距离最近的点对之最短距离MinDist(Left)和MinDist(Right),还有一种情况没有考虑,那就是点对中一个点来自于Left部分,另一个点来自Right部分。最直接的想法,那就是穷举Left和Right两个部分之间的点对,这样的点对很...原创 2018-06-20 01:20:15 · 1350 阅读 · 0 评论 -
数组分割
#include <iostream> #include <algorithm> using namespace std;#define MAXN 101 #define MAXSUM 100000 int A[MAXN];bool dp[MAXN][MAXSUM];// 题目可转换为从2n个数中选出n个数,其和尽量接近于给定值sum/2 int main(){ ...原创 2018-06-25 00:39:09 · 561 阅读 · 0 评论 -
最大公约数
问题:求两个正整数的最大公约数方法一:辗转相除法int gcd(int x,int y){return (!y)?x:gcd(y,x%y);}方法二:辗转相减法int gcd(int x,int y){if(x<y) return gcd(y,x);if(y==0) return x;else return gcd(x-y,y);}方法三:利用移位运算和减法运算int gcd(int x,i...原创 2018-06-18 10:07:16 · 358 阅读 · 0 评论 -
1-N中1的个数
LONGLONG Sum1s(ULONGLONG n){ ULONGLONG iCount = 0; ULONGLONG iFactor = 1; ULONGLONG iLowerNum = 0; ULONGLONG iCurrNum = 0; ULONGLONG iHigherNum = 0; while(n / iFactor!= 0) { ...原创 2018-06-18 10:07:09 · 567 阅读 · 0 评论 -
寻找发帖水王
步骤:1. 可以假设帖子的第一个ID是次数最大的,用candidate记录,次数用nTimes记录。2. 遍历下一个ID,如果跟candidate一样,nTimes++,否则,遇到一个挑战,则nTimes--,如果nTimes == 0,下一步就要重复第一步了。3.遍历结束,nTimes>0的那个candidate就是水王ID,他是获胜者。Type Find(Type* ID, int N)...原创 2018-06-18 10:06:56 · 177 阅读 · 0 评论 -
判断一个整数是否为2的方幂
return n>0&&((n&(n-1))==0)注意:n&(n-1)中,n-1将n的二进制表示中的最后一个1变成0,如果n满足2的方幂,那么n&(n-1)必为0.原创 2018-06-18 10:06:45 · 778 阅读 · 0 评论 -
N!阶层的二进制表示中最低位1的位置
其实如果最后一位是0,那么进行右移操作,直到最后一位是1结束,也就是求质因子2的个数,然后再加1即可即有:[N/2]+[N/4]+[N/8]......int CountLowestOne(int n) { int ret=0; while(n) { n>>=1; ret+=n; } return ...原创 2018-06-18 10:06:31 · 692 阅读 · 0 评论 -
N!阶层末尾有多少0
对N进行质因数分解,N!=(2^x)*(3^y)*(5*z)*......,由于2*5=10,所以结果只与2和5的个数有关,每一对2和5相乘都能得到一个0,于是min(x,z)就是要求的结果。不难发现x大于等于z,因为能被2整除的数出现的概率要比能被5整除的数高得多,所以求出5的个数即可。int CountZero1(int n) { int ret=0; int i,j; ...原创 2018-06-18 10:06:11 · 415 阅读 · 0 评论 -
高效率的安排见面会
一天中,要进行N个面试,它们的时间分别为[B[i], E[i]],分别表示面试的开始时间跟面试的结束时间。这N个面试安排在若干个面试点进行,不同的面试在同一个时间不能被安排在同一个面试点。现在要求出至少需要多少个面试点。仍然先对面试数组排序, 然后遍历面试数组, 每遇到一个 B, color +1, 并维护全局最大 color 数; 每遇到一个 E, color 数减一. 返回全局最大 color...原创 2018-06-11 08:21:44 · 270 阅读 · 0 评论