![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程之美
xc889078
这个作者很懒,什么都没留下…
展开
-
阶乘N!的二进制表示中最低位1的位置
这个问题等同于求N!含有质因数2的个数,因为二进制最低位为0代表是偶数,可以被2整除,如果为1则代表是奇数,不能被2整除,其内部也不会包含质因数2,所以质因数2的个数就是二进制表示中最低位1后面的0个数。由于N!中含有质因数2的个数,等于[N/2]+[N/4]+[N]/8......,道理和前一篇找阶乘N!最后有几个0的道理一样#include int main(){ in原创 2013-06-27 09:54:54 · 1870 阅读 · 0 评论 -
阶乘N!末尾有多少个0
如果N!=K*10^M,且K不能被10整除,那么N!末尾有M个0。N!=(2^x)*(3^y)*(5^z)... 由于10=2*5,所以M只跟x,z有关,每一对2和5相乘可以得到一个10,于是M=min(x,z)。不难看出x不大于等于z,因为能被2整除的数出现的频率比能比5整除的数高很多,所以把公式简化为M=z,所以只需要计算出z的值,就能到末尾有几个0。有一个公式z=[N/5]+[N/5^2原创 2013-06-27 09:32:13 · 811 阅读 · 0 评论 -
寻找发帖水王 扩展问题
扩展问题是这样的,如果没有超级水王了,可是有三个ID在列表中出现的次数都超过了1/4,怎么找出这三个ID?思路是类似的,同样,每次删除4个不同的ID,不影响“那三个ID在剩余ID中出现仍然超过1/4”这一事实,因此我们可以每次删除4个不同的ID,直到剩下3个ID为止。具体编程中怎么体现“删除四个不同ID”这一动作呢?我是这样做的。用candidate[3]记录三个候选ID,用count[3]记原创 2013-06-27 10:51:08 · 831 阅读 · 1 评论 -
二叉树中节点的最大距离--递归和非递归
实质上就是求二叉树中每个子树的左右子树距离本子树根节点距离之和中的最大值,子树中包括根节点为root的完整二叉树。#include #include #include using namespace std;typedef struct Node{ int value; int left_len;//左子树的最长距离 int right_len;//右子树的原创 2013-06-27 17:48:08 · 900 阅读 · 0 评论 -
字符串移位包含的问题
题目:给定两个字符串是s1和s2,要求判定s2是否能够被s1做循环移位得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。#include #include using namespace std;int main(){ string s1,s2,s3; cout<<"请输入字符串:"; cin>>s1原创 2013-07-25 15:27:47 · 538 阅读 · 0 评论 -
电话号码对应英语单词
#include #include char *p[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//把所有字符串列出来int total[10] = {0,0,3,3,3,3,3,4,3,4};//每个数字对应的字符串的位数int main(){ char buff[20]; int i; wh原创 2013-09-26 17:44:18 · 1181 阅读 · 0 评论