有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1,1,2,3,5,8,13,21。。。。。。。。(这个是每月兔子的对数,乘2就是总数)
1、数学思想(规律)(前2项之和等于下一项):
34 #include<stdio.h>
35 int main()
36 {
37 int mon=0,f1=1,f2=1,f3=0;
38 printf("请输入月份:\n");
39 scanf("%d",&mon);
40 if(mon==0||mon==1||mon==1)
41 {
42 f3=1;
43 }
44 else
45 {
46 for(int i=3;i<=mon;i++)
47 {
48 f3=f1+f2;
49 f1=f2;
50 f2=f3;
51 }
52 }
53 printf("每个月的兔子总数:%d\n",f3*2);
54
55 }
2、逻辑思想编程:
这里while循环就是过去了多少月,时间的循环,在月份增加中,对兔子处于的月份进行变化,最终求得结果。
1 #include <stdio.h>
2 /*
3 1、有一对兔子,从出生后第3个月起每个月都生一对兔子,
4 小兔子长到第三个月后每个月又生一对兔子,
5 假如兔子都不死,问每个月的兔子总数为多少?
6 1,1,2,3,5,8,13,21。。。。。。。。
7 */
8 #if 1
9 int main()
10 {
11 int i=0,num2=0,num1=1,num3=0;
12 printf("请输入月份:\n");
13 scanf("%d",&i);
14 while(i--)
15 {
16 #if 0
17 //其实也就分为了下一个月能生的和不能生的, num1是给新出生兔子的中转
18 num3+=num2;//2月的兔子变成3月份的兔子,就是二月的兔子+三月的兔子
19 num2=num1;//1月的兔子变成2月份的兔子,一月的兔子数
20 num1=num3;//新出生的兔子
21 #endif
22 num2=num1;
23 num1=num3;
24 num3+=num2;
25 }
26 //printf("每个月的兔子总数:%d\n",(num1+num2)*2);
27 printf("每个月的兔子总数:%d\n",(num1+num2)*2);
28
29 return 0;
30 }
31
32 #endif
数学思想找规律极其快速,但是不敏感就另说了,我一开始就没考虑这种方法,直接用逻辑思想,花了一个小时左右才把思想真正理清楚。相比而言,在这一题上,数学思想的更好理解,时间也相对用的较少;逻辑思想就有些难理解,时间可能也会用的更多,不过代码量较少。