NOIP2001 提高组 复赛 数的计数

来源:互联网 发布:c语言将大写转换为小写 编辑:程序博客网 时间:2024/06/16 18:55

//1316 【例4.6】数的计数(Noip2001)
//提交,未通过,测试点10:运行超时
//洛谷里 P1028 数的计算 发现数据有更新,除了原有5个数据外,又增加了15个数据,提交,这15个数据全是TLE
//看来,递归是没用了,要递推。采用递归编写的代码,获得以下数据
//n ans
//1 1
//2 2
//3 2
//4 4
//5 4
//6 6
//7 6
//8 10
//9 10
//10 14
//11 14
//发现i是奇数a[i]=a[i-1],i是偶数a[i]=a[i-1]+a[i/2];
//这总方法,属于纯模拟的递推
//从编程角度,该题递归比递推容易理解

#include <stdio.h>
int a[1100];
int main(){
    int n,i;
    scanf("%d",&n);
    a[1]=1,a[2]=2;
    for(i=3;i<=n;i++)
        if(i%2==1)a[i]=a[i-1];//奇数
        else a[i]=a[i-1]+a[i/2];//偶数
    printf("%d",a[n]);
    return 0;
}

以下代码为,提交,未通过,测试点10:运行超时
#include <stdio.h>
int cnt=1;//1表示加上自己本身
void f(int k){
    int i;
    if(k==0)return;
    for(i=1;i<=k/2;i++)cnt++,f(i);
}
int main(){
    int n;
    scanf("%d",&n);
    f(n);
    printf("%d",cnt);
    return 0;
}
原创粉丝点击