列表

详情


XM21. 求数列第n项

描述

米兔从兔米那里了解到有一个无限长的数字序列 1,  2,3,3,4,4,4,  5,5,5,5,5 ...,(已知此数列有一定规律,现将这些数字按不同数值堆叠,相同值的数字在同一层)。米兔想知道这个数字序列的第n个数所在的那一层之前的所有层里共有多少个数。

输入描述

n(n<=1e18)

输出描述

第n个数所在的那一层之前的所有层里共有多少个数

示例1

输入:

6

输出:

4

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 308KB, 提交时间: 2021-09-19

#include<stdio.h>

int main()
{
    long long int a=0,b=1,c,n,sum=1;
    scanf("%lld",&n);
    while(sum<n)
    {
        c=a+b;
        a=b;
        b=c;
        sum=sum+c;
    }
    printf("%lld",sum-b);
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 328KB, 提交时间: 2021-08-21

#include <stdio.h>
int main(){
    long long array[1000] = {0};
    array[0] = 0;
    array[1] = 1;
    long long n;
    int i=2;
    long long sum=1;
    long long tmp;
    while(scanf("%lld",&n) != EOF){
        if(n==1){
            printf("0");
            break;
        }
        while(i<1000){
            array[i] = array[i-1]+ array[i-2];
            tmp = sum;
            sum+= array[i];
            if(sum >= n && tmp < n){
                printf("%lld",tmp);
                break;
            }
            i++;
        }
        
    }
    return 0;
}

上一题