题目
原题
原题:
长寿的兔子
张三家里养了一对刚出生的兔子, 兔子出生第3个月起每月都会生一对小兔子. 小兔子出生后第三个月起也会每月生一对兔子
张三想知道 如果兔子不死 n月后家里会有多少对兔子
样例输入: 7
样例输出:13
样例输入: 12
样例输出: 144
开题
自己的思路:
首先将兔子分为 第一个月的兔子i 第二个月的兔子j 能生的兔子k
兔子的总数为 sum = i + j +k;
设定限制条件 计算到第几个月(不然会无限生下去) 定义月份month
代码
代码1
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
void In(double* a); //对输入数据进行判断
int main()
{
int month; //月份
double _monthMax;//所输入的月份(带小数)
int monthMax;//所输入的月份(整数)
int sum; //兔子的总数
while (1)
{
int choice = 0; //用于退出
int i = 0; //用于循环
int j = 0; //用于循环
int k = 1;
system("title 【婳骨】の生兔子情况");
printf("请输入查看到第几个月:");
while (1)
{
In(&_monthMax);
monthMax = (int)_monthMax;
if (monthMax < 1)
{
printf("输入错啦!请重新输入!\n");
}
else break;
}
for (month = 1; month <= monthMax; month++)
{
if (month > 2)
{
k = k + j; //能生的 = 能生的 + 之前第二个月的
j = i; //第二个月的 = 之前的第一个月的
i = k; //第一个月的 = 目前能生的
sum = i + j + k;//确认了总数
printf("第%d个月的兔子总数为%d对\n", month, sum);
Sleep(500);
}
if (month < 3)
{
printf("第%d个月的兔子总数为1对\n", month);
Sleep(500);
}
}
printf("是否输入新的月份?(如要输入请按0,否则按下任意键退出)\n");
choice = getch();
if (choice == '0')
system("cls");
else
{
printf("谢谢使用!欢迎下次来生!\n");
break;
}
}
system("pause");
return 0;
}
void In(double* a) //对输入数据进行判断
{
do
{
if (scanf_s("%lf", a) == 1)
{
break;
}
char choice;
while ((choice = getchar()) != '\n' && choice != EOF);
printf("输入的不是数字!\n");
} while (scanf_s("%lf", a) != 1);
}
代码2(另一种思路)
//思考:可以进行找规律
int main()
{
long f1,f2;
int i;
f1 = f2 =1;
for(i = 1; i <= 20; i++)
{
printf("%12ld%12ld", f1, f2);
if(i % 2 == 0) printf("\n"); //控制输出,每行四个
f1 = f1 + f2; //前两个月加起来复制给第三个月
f2 = f1 + f2; //前两个月加起来复制给第三个月
}
return 0;
}