1 条题解

  • 0
    @ 2025-2-14 21:26:46

    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
    904
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者