C 练习实例11
题目:古典问题(兔子生崽):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)
程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....,即下个月是上两个月之和(从第三个月开始)。
程序源代码:
// Created by study.p2hp.com on 15/11/9.
// Copyright © 2015年 高手教程. All rights reserved.
//
#include<stdio.h>
int main()
{
int f1=1,f2=1,i;
for(i=1;i<=20;i++)
{
printf("%12d%12d",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f1+f2;
}
return 0;
}
以上实例输出结果为:
1 1 2 3
5 8 13 21
34 55 89 144
233 377 610 987
1597 2584 4181 6765
10946 17711 28657 46368
75025 121393 196418 317811
514229 832040 1346269 2178309
3524578 5702887 9227465 14930352
24157817 39088169 63245986 102334155
C 语言经典100例



冯玉玺
393***315@qq.com
参考地址
使用数组方式:
#include <stdio.h> int main() { int n[41], i; //定义 n[0] = 0; //赋值 n[1] = 1; n[2] = 1; for (i = 3; i < 41; i++) { n[i] = n[i - 1] + n[i - 2]; } printf("month\tnumber\n"); //输出 for (i = 1; i < 41; i++) { printf("%d\t%d\n", i, n[i]); } //system("pause"); }输出结果为:
冯玉玺
393***315@qq.com
参考地址
zpblog
zpb***@zpblog.cn
参考地址
递归:斐波那契数列
#include<stdio.h> int fibonaci(int i) { if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonaci(i-1) + fibonaci(i-2); } int main() { int i; printf("month\tnumber\n"); for (i = 1; i < 41; i++) { printf("%d\t%d\n", i,fibonaci(i)); } return 0; }zpblog
zpb***@zpblog.cn
参考地址
小银子
101***1552@qq.com
尽量使用最少的代码,最小的内存实现。不要使用斐波那契数列递归求解,因为这样会做许多无用功
#include <stdio.h> int main() { int now =1, prev_1= 1,prev_2=0; printf("%i\n", now); for(int i = 1;i<40;i++) { now = prev_1+prev_2; printf("%i\n", now); prev_2 = prev_1; prev_1 = now; } }小银子
101***1552@qq.com
123adqe
827***724@qq.com
参考方法:
#include<stdio.h> int main() { int yt=1,et=0,st=0,zt; // 一兔 二兔 三兔 总兔 \(=_=)/ for(int t=0;t<40;t++)//(" \t=tab 一个tab三个空格") { st = et+st; // 0 0 1 1 et = (t == 0) ? 0 : yt; // 0 1 0 1 yt = (t == 0) ? 1 : st; // 1 0 1 1 zt = yt+et+st; // 1 1 2 3...... printf("%d\t月兔子有 %-10d \t 对\n",t+1,zt); } }123adqe
827***724@qq.com
学工
121***1688@qq.com
/* * 没有参考答案那么简洁,献丑分享下自己的想法。 * 因为兔子出生两个月后就可以产兔子,所以存在: * 从第3个月开始,每个前后月差值等于前两个月的前后月差值之和; * 由此可知某月兔子对数等于前一月兔子数加上前后月差值。 */ #include <stdio.h> int main() { int a1=0, a2=1, n=1, x, month; for(month=1;month<=40;month++) { if(month>2){ n=n+a2; x=a2; a2=a1+a2; a1=x; } printf("%d月的兔子总数为%d\n",month,n); } }学工
121***1688@qq.com