解题思路:
注意事项:
参考代码:
题目分析
根据题意,先列出前几年的牛头数,试着找找规律:
在列出这个序列的过程中,应当能找出规律。
以n=6为例,fn=9头牛可以分解为6+3,其中6是上一年(第5年)的牛,3是新生的牛(因为第3年有3头牛,这3头在第6年各生一头牛)。
我们可以得出这样一个公式:fn=fn-1+fn-3。再理解一下,fn-1是前一年的牛,第n年仍然在,fn-3是前三年那一年的牛,
但换句话说也就是第n年具有生育能力的牛,也就是第n年能生下的小牛数。编程序,求解这个公式就行了。
当然,第1-3年的数目,需要直接给出。很像斐波那契数列,有不一样之处,道理、方法一样。其实,在编程之前,讲究先用这样的方式建模。
**迭代法求解**
#include <iostream> using namespace std; int main() { int n,i; int f1, f2, f3, fn; while(cin>>n&&n!=0) { //下面求第n年有几头牛 f1=1; f2=2; f3=3; if(n==1) cout<<f1<<endl; else if(n==2) cout<<f2<<endl; else if(n==3) cout<<f3<<endl; else { for(i=4; i<=n; i++) { fn=f3+f1; f1=f2; //f1代表前3年 f2=f3; //f2代表前2年 f3=fn; //f3代表前1年 } cout<<fn<<endl; } } return 0; }
**数组求解**
#include<bits/stdc++.h> using namespace std; int main() { int n,f[56]= {0,1,2,3}; for(int i=4; i<=55; i++) { f[i]=f[i-1]+f[i-3]; } while(cin>>n&&n!=0) { cout<<f[n]<<endl; } return 0; }
0.0分
80 人评分
#include<stdio.h> int main() { int a=1; int n; while(scanf("%d", &n)!=0){ if (n>0&&n<=4) a=+n; if (n>4) a=+3+(n-2)*(n-3)/2; printf("%d\n",a);} return 0; } 我这个为啥不行啊,没搞明白
第一年不是有两只吗?母牛加它生的小牛。。。
看不懂
C二级辅导-同因查找 (C语言代码)浏览:590 |
C语言训练-斐波纳契数列 (C语言代码)浏览:826 |
C二级辅导-同因查找 (C语言代码)浏览:705 |
模拟计算器 (C语言代码)浏览:966 |
简单编码 (C++代码)浏览:730 |
C二级辅导-公约公倍 (C语言代码)浏览:1550 |
printf基础练习2 (C语言代码)浏览:605 |
C语言训练-数字母 (C语言代码)浏览:610 |
C语言训练-立方和不等式 (C语言代码)浏览:779 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:761 |
杨小丑 2019-12-03 21:40:58 |
不是
被惦记:*♡ 2021-01-31 14:18:43 |
c++