Kiku


私信TA

用户名:Kiku

访问量:6416

签 名:

如果是哥哥的话进来也没关系哦

等  级
排  名 9655
经  验 1138
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校 湖北工业大学
专  业

  自我简介:

我这儿有了两种方法,无论使用哪种方法你都要抓住当年母牛生下的小牛与几年前的母牛数(也就是当年的成熟牛)是相等的这个规律,数组法会受到题目所给出的年数的局限,比较浪费空间,递推法的则更需要理解内部的规律。

数组法

#include<stdio.h>

int main(){

    int n,count=0;

    int i;

    while(scanf("%d",&n)&&n)

    {

    int a[56];

    for(i=1;i<56;i++)

    {

    if(i<=4)

    a[i]=i;

    else

    a[i]=a[i-1]+a[i-3];

}

printf("%d\n",a[n]);

    }

    return 0;

}

递推法

#include <stdio.h>

int main()

{

int n,i;

while(scanf("%d",&n)&&n)

{

int num[3]={1,2,3};

for(i=1;i<n/3.0;i++)

{

num[0]+=num[2];

num[1]+=num[0];

num[2]+=num[1];

}

printf("%d\n",num[(n-1)%3]);

}

return 0;

}


 

0.0分

1 人评分

  评论区

我跟你一样的思路,但是试了好多while判断语句都无法正常使用,只有你这个能用,我不太明白为什么不能用scanf的返回值==1之类的做法
2019-09-14 14:23:31
这个递推法牛逼了
  1   2    3
  4   6    9
13  19  28
41   60  88
for循环中用隐式类型转换控制住了循环叠加1次
使用取余完美取出数字,不占用太多额外空间
2019-03-09 20:37:32
好厉害,非常感谢
2017-08-25 16:15:32
for(i=1;i<n/3.0;i++) 中的 i<n/3.0 是什么意思?
2017-06-13 21:41:23
  • «
  • 1
  • »