XMU1428 求递归的次数 帅额

1428.Hofstadter G-sequence
Time Limit: 1000 MS         Memory Limit: 65536 K
Total Submissions: 228 (66 users)         Accepted: 42 (39 users)
[ My Solution ]

Description

Hofstadter G-sequence是一个有趣的数列, 但由于在此篇幅有限, 我们就不做具体的介绍了。以下的代码, 所求的函数G(n)即为Hofstadter G-sequence数列:
int G(int n)
{
    if(n <= 1) return 1;
    return n - G(G(n - 1));
}
当然, 这道题目的要求并不是要你求出函数G(n)的值, 而是给定你一个正整数x, 你需要求解, 使用上面这个函数计算出G(x)的值需要调用函数G(n)多少次呢?

Input

输入只有一行, 一个正整数x (1 <= x <= 1,000,000)。

Output

由于答案可能会很大, 所以你只需输出答案对1,000,000,007取模后的结果即可。

Sample Input

3

Sample Output

5

Source
http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1428
详细看代码

#include <stdio.h> 
#include<string.h> 
int f[1000011],ans[1000011];  
const  int  mod=1000000007;  
void get()
{
	int i,j;
	    f[1]=1;
    for(i=2;i<=1000000;i++)  
    {  
        f[i]=i-f[f[i-1]];  
    }  
    ans[1]=1;  
    for(i=2;i<=1000000;i++)  
    {  
        ans[i]=(ans[i-1]%mod+ans[f[i-1]]%mod+1)%mod;  
    }  
}
int main()  
{
    int i,j,m,n;  
    get();
    while(scanf("%d",&n)==1)  
    { 
        printf("%d\n",ans[n]);  
    }  

    return 0;  
}










你可能感兴趣的:(XMU1428 求递归的次数 帅额)