九度笔记之 1466:排列与二进制
来源:互联网 发布:网络的利与弊初中作文 编辑:程序博客网 时间:2024/05/01 02:36
题目1466:排列与二进制
- 题目描述:
在组合数学中,我们学过排列数。从n个不同元素中取出m(m<=n)个元素的所有排列的个数,叫做从n中取m的排列数,记为p(n, m)。具体计算方法为p(n, m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! (规定0!=1).当n和m不是很小时,这个排列数是比较大的数值,比如 p(10,5)=30240。如果用二进制表示为p(10,5)=30240=( 111011000100000)b,也就是说,最后面有5个零。我们的问题就是,给定一个排列数,算出其二进制表示的后面有多少个连续的零。
- 输入:
输入包含多组测试数据,每组测试数据一行。
每行两个整数,n和m,0<m<=n<=10000,n=0标志输入结束,该组数据不用处理。
- 输出:
对于每个输入,输出排列数p(n, m)的二进制表示后面有多少个连续的零。每个输出放在一行。
- 样例输入:
10 56 10 0
- 样例输出:
51
算法分析
1,第一种方法,
我们可以求n!里面有多少个2
2,第二种方法,
我们可以求n里面有多少个2
源程序
第一种方法
#include <iostream>int countZero(int n){ int c = 0; while(n/2){ c+=n/2; n = n/2; } return c;}void judo(){ int n; int m; while(std::cin>>n>>m){ if(!n) break; std::cout<<countZero(n)-countZero(n-m)<<std::endl; }}int main(){ judo(); return 0;}/************************************************************** Problem: 1466 User: KES Language: C++ Result: Accepted Time:10 ms Memory:1520 kb****************************************************************/
#include <iostream>int countZero(int n){ int c = 0; while(n){ n = n>>1; c+=n; } return c;}void judo(){ int n; int m; while(std::cin>>n>>m){ if(!n) break; std::cout<<countZero(n)-countZero(n-m)<<std::endl; }}int main(){ judo(); return 0;}/************************************************************** Problem: 1466 User: KES Language: C++ Result: Accepted Time:10 ms Memory:1520 kb****************************************************************/
第二种方法
#include <iostream> int countZeroNew(int n){ int c = 0; while(!(n&1)){ c+=1; n = n>>1; } return c;}void judoNew(){ int n; int m; int s = 0; while(std::cin>>n>>m){ if(!n) break; s = 0;//ATTENTION for(int i = n;i>n-m;i--){ s+=countZeroNew(i); } std::cout<<s<<std::endl; }}int main(){ judoNew(); return 0;} /************************************************************** Problem: 1466 User: KES Language: C++ Result: Accepted Time:10 ms Memory:1520 kb****************************************************************/
- 九度笔记之 1466:排列与二进制
- 题目1466:排列与二进制
- 题目1466:排列与二进制
- 题目1466:排列与二进制
- 题目1466:排列与二进制
- 题目1466:排列与二进制
- 题目1466:排列与二进制
- 九度笔记之 1369:字符串的排列
- 排列与二进制
- 题目1466:排列与二进制(机试2010)
- 九度OJ 教程91 回溯算法之《全排列》
- 九度笔记之 最大公约数
- 九度 1120 全排列
- 九度OJ 全排列
- 九度[1120]-全排列
- “排列与组合”笔记
- 九度-北邮-1473-二进制
- 九度oj1473 二进制数
- response.encodeURL()延伸之:URL重写
- javascript 单例模式
- 行为型模式--策略模式
- 如何让外网访问到IIS的web站点
- Android singleTop的应用
- 九度笔记之 1466:排列与二进制
- GSL Non-Complete Primer
- MyEclipse/Eclipse Color Themes
- ARC 工程出现错误__NSAutoreleaseNoPool(): Object 0x8850ce0 of class __NSCFData autoreleased with no pool in
- 社保那些事
- C:统计数组中不重复数组个数
- 把txt文本数据写入二维数组
- 启动weblogic时报错: java.lang.NoClassDefFoundError: weblogic/Server
- Ubuntu下,建立/复制/移动/删除文件或目录