标签:
描述
兔子具有很强的繁殖能力,一对成兔每月可以繁殖一对幼兔,但m月后,幼兔子又成长为成兔子。
我们都知道,当m=1时,每月兔子的数目是一个Fibonacci数列。但当m<>1时,问题就复杂多了。你要做的事为:计算开始就仅有一对成兔,d月后应该有多少兔子?你可以假设该过程没有兔子死掉。
输入
输入有多个用例,每个用例使用一行给出由空格分开的两个正整数m(1≤m≤10)和d(1≤d≤100),m表示幼兔子成长为成兔子需要的月数,d表示你需要计算d月的兔子数。以两个零表示用例结束。
输出
每个用例计算的结果使用一行输出。既d月后兔子的对数。
样例输入
样例输出
1 #include<iostream> 2 #include<stdio.h> 3 #include<string.h> 4 using namespace std; 5 char f[1000][1000]; 6 void add(char *a, char *b, char *c) 7 { 8 int lb, lc, max, i, t, s; 9 lb = strlen(b); 10 lc = strlen(c); 11 max = lc > lb?lc:lb; 12 t = 0; 13 for(i = 0; i < max; i++) 14 { 15 if(lb>0) t+=b[--lb]-‘0‘; 16 if(lc>0) t+=c[--lc]-48; 17 18 a[i] = t%10+‘0‘; 19 t = t/10; 20 } 21 if(t) 22 { 23 a[i] = t+‘0‘; 24 i++; 25 } 26 a[i] = ‘\0‘; 27 strrev(a); 28 } 29 30 int main() 31 { 32 int d,m,i; 33 while(cin>>m>>d && m && d) 34 { 35 if(d<m) 36 cout<<d+1<<endl; 37 else 38 { 39 strcpy(f[0],"1"); 40 for(i=1;i<m;i++) 41 add(f[i],f[i-1],"1"); 42 for(i=m;i<=d;i++) 43 add(f[i],f[i-1],f[i-m]); 44 cout<<f[d]<<endl; 45 } 46 } 47 return 0; 48 }
标签:
原文地址:http://www.cnblogs.com/jianqian/p/5030901.html