Loading... 时隔多月,该刷题了; <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-89b6fad60386ce8e72f4a7b83531d27398" aria-expanded="true"><div class="accordion-toggle"><span>题目</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-89b6fad60386ce8e72f4a7b83531d27398" class="collapse in collapse-content"><p></p> ## 题目描述 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? ## 输入: 输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。 ## 输出: 对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。 ## 举例: ### 样例输入: ``` 2 4 5 0 ``` ### 样例输出: ``` 2 4 6 ``` <p></p></div></div></div> ## 我的答案: ```cpp #include<iostream> #include<algorithm> #include<string> using namespace std; int main(){ int scan; cin>>scan; while(scan){ int a[4] = {1, 0, 0, 0}; int i = scan; while(i > 1){ swap(a[1],a[2]); swap(a[1],a[3]); a[0] += a[1]; a[1] = a[0]; i--; } int sum = 0; for(int i = 0; i < 4; i++){ sum += a[i]; } cout<<sum<<endl; cin>>scan; } return 0; } ``` ## 解题思路: ![](https://www.bdmcom.cn/usr/uploads/2021/12/209724265.png) <div class="tip inlineBlock success"> ### 准备: 我们可以弄一个存储4个数据的整型数组a[4],a[0]放:大母牛,a[1]放:养了一年的小母牛,a[2]放:养了两年的小母牛,a[3]放:养了三年的小母牛。 ### 由上面表格可以得出一次循环过后: a[2] = a[1] a[3] = a[2]; a[0] = a[0] + a[3]; a[1] = a[0]; ### 语言表达就是: 下标为1的元素存储到了下标为2的位置上,(第一年小母牛长大) 下标为2的元素存储到了下标为3的位置上,(第二年小母牛长大) 下标为0的位置存储 :原有数据 + 原先下标为3位置的元素,(第三年小母牛变成大母牛) 下标为1的位置存储:下标为0的元素(每只大母牛都生小母牛) ### 最后母牛数: 母牛总数 = 大母牛 + 第一年小母牛 + 第二年小母牛 + 第三年小母牛 </div> 最后修改:2021 年 12 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果文章有用,请随意打赏。
2 条评论
这样的题一般都是找时间上生牛数量的规律,和斐波那契一样,生兔子。是吧hh
对的 ,纯规律