1 条题解

  • 0
    @ 2025-10-10 15:45:26

    C :

    #include <stdio.h>
    int main(){
    	int n,i = 2;
    	scanf("%d",&n);
    	while(i < n){
    		i *= 2;
    	}
    	if(i - n < n - i / 2)
    		printf("%d",i);
    	else
    		printf("%d",i/2);
    	
    }
    

    C++ :

    #include<iostream>
    using namespace std;
    int main(){ 
       int n,i;
       cin>>n;
       i = 2;
       while(i < n){ 
         i = i * 2;
       }
       if(i - n < n - i / 2){ 
          cout<<i<<endl;
       }else{ 
          cout<<i / 2 <<endl;
       }
        
       return 0;
    }
    

    Pascal :

    var  i:integer;
         n,t:int64;
         a:array[0..31] of int64;
    begin
      readln(n);
      t:=1; a[0]:=1;
      for i:=1 to 31 do
        begin
         t:=t*2;
         a[i]:=t;
        end;
      i:=0;
      while n>a[i] do inc(i);
      if (a[i]-n) >= (n-a[i-1]) then write(a[i-1]) else write(a[i]);
    end.
    
    

    Java :

    import java.util.Scanner;
    public class Main{
    	public static void main(String[] args) {
    		int n=new Scanner(System.in).nextInt();
    		int l1=0;
    		int l2=0;
    		for(int k=1;k<=n;k++){
    			if(Math.pow(2,k)<=n&&Math.pow(2,k+1)>=n){
    				l1=n-(int) Math.pow(2,k);
    				l2=(int) Math.pow(2,k+1)-n;
    				if(l1<=l2){
    					System.out.println((int) Math.pow(2,k));
    				}else{
    					System.out.println((int) Math.pow(2,k+1));
    				}
    			}	
    		}
    	}
    }
    

    Python :

    a=int(input())
    b=[]
    c=1
    for i in range(1,33):
        b.append(c)
        c=c*2
    for i in range(0,32):
        if(abs(b[i]-a)>=abs(b[i+1]-a) and abs(b[i+1]-a)<=abs(b[i+2]-a)):
            print(b[i+1])
            break
    
    • 1

    信息

    ID
    74
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者