分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代

分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代
/*======================================================================
儿童节快到了,班长想要给班上的每个同学给一个巧克力,
巧克力的形状是一个宽为2,长为n的长方形,由于巧克力太贵,
班长就想把这个大块的巧克力分成许多 1*2(宽*长)的小块巧克力,
这样每个人都能得到一份1*2的巧克力,现在给定巧克力的长为
正整数n(1<=n<=91),请你判断对于这 个2*n的巧克力有多少种不同的分法?

分析:
这个其实就是考查费波纳奇数列。
考虑第一块的分法有如下两种选择:(横放或者竖放)
分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代
假设用f(n)表示长度为n的时候所有不同分法的数量,则
f(1)=1;
f(2)=2;
f(n)=f(n-1)+f(n-2)………………n>=3
题目输入n计算并输出f(n),所以可以直接用递归去解。
再看看,这个和费波那奇数列是一个样的,用迭代其实也可解决的。 ========================================================================
*/
分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代
分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,i;
 5     long n1=1;
 6     long n2=2;
 7     long c=n1+n2;
 8     scanf("%d",&n);
 9     if(n==1) printf("%ld\n",n1);
10     else if(n==2) printf("%ld\n",n2);
11     else
12     {
13         for(i=4;i<=n;i++)
14         {
15             n1=n2;
16             n2=c;
17             c=n1+n2;
18         }
19         printf("%ld\n",c);
20     }
21     return 0;
22 }
分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代

分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代

上一篇:C# VS EditorBrowsable特性 控制智能提示


下一篇:【转】group_concat函数详解