poj3252Round Numbers(数学问题)
来源:互联网 发布:spss数据描述统计分析 编辑:程序博客网 时间:2024/06/08 03:20
大致题意:
输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少个Round number
所谓的Round Number就是把一个十进制数转换为一个无符号二进制数,若该二进制数中0的个数大于等于1的个数,则它就是一个Round Number
注意,转换所得的二进制数,最高位必然是1,最高位的前面不允许有0
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int c[33][33];//把组合数打表int bin[35];//10进制n的二进制数int a,b;void play_table(){for(int i=0;i<33;i++)c[i][0]=1;for(int i=1;i<33;i++)for(int j=1;j<=i;j++)c[i][j]=c[i-1][j-1]+c[i-1][j];}void dec_to_bin(int n){bin[0]=0;//记录二进制位数,当然n要大于0 while(n){bin[++bin[0]]=n&1;n>>=1;}}int round(int n){int sum=0;dec_to_bin(n);//计算比n的十进制位数少的 for(int i=1;i<bin[0]-1;i++)//第一位是1,故bin[0]-1for(int j=i/2+1;j<=i;j++)sum+=c[i][j];int zero=0;for(int i=bin[0]-1;i>0;i--)if(bin[i])//如果是1,则要么变成0,要么选择不变 for(int j=(bin[0]+1)/2-(zero+1);j<i;j++) sum+=c[i-1][j];else zero++;//如果是0,则只能选择不变 return sum; }int main(){play_table();while(~scanf("%d%d",&a,&b)) printf("%d\n",round(b+1)-round(a));return 0;}
1 0
- poj3252Round Numbers(数学问题)
- poj3252Round Numbers(递归)
- poj3252Round Numbers
- poj3252Round Numbers【数位dp】
- POJ3252Round Numbers(数位DP)
- poj3252Round Numbers非递归数位dp解
- POJ 3252 Round Numbers(数学问题)
- POJ 3252 Round Numbers(数学问题)
- 经典 数学问题 Fibonacci Numbers
- HDU-5585 Numbers(数学)
- POJ 3252 Round Numbers(组合数学)
- poj 3252 Round Numbers (组合数学)
- POJ 3252 Round Numbers(组合数学)
- URAL 2070 Interesting Numbers(数学)
- poj_3252 Round Numbers(组合数学)
- POJ 3552Round Numbers(组合数学)
- [Codeforces300C]Beautiful Numbers(数学相关)
- POJ 3252 Round Numbers (组合数学)
- 一个项目学会前端实现登录拦截
- Android 6.0获取动态权限
- Java多态的应用_模板模式
- CSS常用属性样式表(1)
- Vue开发小实践--身份查询系统
- poj3252Round Numbers(数学问题)
- activemq订阅模式和队列模式的Demo讲解(maven,spring管理)(史上最全版本)
- Go上传文件
- 欢迎使用CSDN-markdown编辑器
- iOS波纹动画
- 多线程
- 盒模型 块级元素内联元素
- Android service
- C