1 条题解
-
0
C :
#include<stdio.h> int Jds(int m,int n) { int l,r,sum; l=r=m;//左=右=m for(sum=2;r*2+1<=n;) { sum=sum*2; l=l*2; r=r*2+1; } l=l*2;//找到最左边和最右边 if(l<=n)//如果最左边后面还有数,则加上去 sum=sum+n-l+1; printf("%d\n",sum-1); return 0; } int main() { int m,n; while(scanf("%d%d",&m,&n)!=EOF)//最后一个节点是n { if(m==0&&n==0) break; Jds(m,n); } return 0; }
C++ :
#include <stdio.h> int m,n; int run() { int t=0,i=1,k; while(m*i<=n) { k=m*i+i-1; if(k>n) k=n; t+=(k-m*i+1); i*=2; } return t; } int main() { scanf("%d%d",&m,&n); while((m!=0)||(n!=0)) { printf("%d\n",run()); scanf("%d%d",&m,&n); } return 0; }
Pascal :
var m,n,i:longint; function measure(l,r:longint):longint; begin if l>n then measure:=0 else if r>n then measure:=n-l+1 else measure:=measure(2*l,2*r+1)+r-l+1 end; begin readln(m,n); while (m<>0)and(n<>0)do begin writeln(measure(m,m)); readln(m,n) end end.
- 1
信息
- ID
- 1105
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者