瑞士2013年第14期的序列

时间:2015-10-20 09:30:41

标签: c++

enter image description here

这是我的程序我想知道是否有任何替代数学逻辑可以在3020秒到20132014期间生成结果?

#include<stdio.h>
#include<stdlib.h>

#include<conio.h>
long int *a,i,j,t;

int main()
{
    //clrscr();
    //printf("%ld",sizeof(long long  int));
    printf("\n Enter the number of terms: ");
    scanf("%ld",&t);

    a=(long int*)malloc(t*sizeof(long int));
    *(a+0)=0;
    printf("\na0=%5ld",*(a+0));
    for(i=1;i<=t;i++) {
        if(*(a+i-1)-i>0) {
            for(j=0;j<i;j++) {
                if(*(a+j)==*(a+i-1)-i)
                    goto Deepak;
            }
            *(a+i)=*(a+i-1)-i;
        }
        else
            Deepak:
        *(a+i)=*(a+i-1)+i;
        printf("\na%ld= %5ld",i,*(a+i));
    }
    //printf("\na%ld= %5ld",i,*(a+i));

    free(a);
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:0)

由于您还没有告诉我们内存限制,缓冲区大约为200MB,因此直截了当 &#34;哑&#34;计算是可能的,并且在现代计算机上不需要接近30秒的任何东西。

String cron = "0 0 12 * * ? *";
CronExpression cronExpression = new CronExpression(cron);
Date date1 = cronExpression.getNextValidTimeAfter(new Date());
Date date2 = cronExpression.getNextValidTimeAfter(date1);
long diff = date2.getTime() - date1.getTime();
long days = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);

20132014号码的结果为76913715 您可以轻松更改循环条件以获取其他索引。

答案 1 :(得分:0)

当然它取决于你的机器,程序运行多长时间。我自己实现了序列并用它进行了测试:

#include <iostream>
#include <unordered_set>


auto print_recaman(long int n)
-> void {
    auto known_values = std::unordered_set<long int>{};
    known_values.reserve(n);

    long int previous = 0;
    long int i = 0;
    for(; i < n; i++) {
        std::cout << i << ": " << previous << '\n';
        auto next = previous - n;
        previous = (next <= 0 || known_values.count(next) > 0) ? 
                   previous + n :
                   next;
    }
    std::cout << i << ": " << previous << std::endl;    
}

auto main(int, char**) -> int {
    print_recaman(20132014L);
}

我的笔记本电脑上的测试:

$ time ./a.out > /dev/null

real    0m3.945s
user    0m3.914s
sys     0m0.031s