1 条题解

  • 0
    @ 2025-4-7 21:41:57

    C :

    #include <stdio.h>
    #include <math.h>
    unsigned long long compute(int n)
    {
    	int i;
    	unsigned long long sum = 0;
    	if (n < 4)
    	{
    		switch (n)
    		{
    		case 1:	return 1;
    		case 2:	return 3;
    		case 3:	return 5;
    		}
    	}else{
    		i = (int)(sqrt(8 * n + 1) - 1) / 2;
    		
    		sum += 2 * compute(n - i) + (2 << (i - 1)) - 1;
    	}
    	return sum ;
    }
    int main(void)
    {
    	int num = 0;
    	while (scanf("%d", &num) == 1)
    	{
    		printf("%llu\n", compute(num));
    	}
    }
    

    C++ :

    #include <iostream>
    using namespace std;
    int main(){
    	unsigned long long a[2][65];
    	a[0][0] = 0;
    	a[1][0] = 0;
    	a[0][1] = 1;
    	a[1][1] = 1;
    	for(int i=2;i<65;i++){
    		int min = 10000000;
    		for(int j=1;j<i;j++)
    			if(min > 2*a[1][j]+a[0][i-j])
    				min = 2*a[1][j]+a[0][i-j];	
    		a[1][i] = min;
    		a[0][i] = 2*a[0][i-1] + 1;
    	}
    	for(int n;cin>>n;)
    		cout<<a[1][n]<<endl;
    	return 0;
    }
    

    Java :

    public class Main{
    	static int [] a=new int [65];
    public static void main(String[] args) {
    	java.util.Scanner in=new java.util.Scanner(System.in);
    	while(in.hasNext()) {
    	
    	int y =2;
    	int y1 =2;
    	int y2 =2;
    	int []x=new int[65];
    	x[1]=1;
    	for(int i=2;i<65;i++) {
    		x[i]=x[i-1]+y;
    		y1--;
    		if(y1==0) {
    			y=y*2;
    			y2=y2+1;
    			y1=y2;
    	}
    		}
    	int b =in.nextInt();
    	if(b==1)
    		System.out.println(1);
    	else
    	System.out.println(x[b]);
    	}}}
    
    • 1

    信息

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