1 条题解
-
0
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
- 上传者