NO.21【婳骨】の生兔子情况

题目

原题

原题:
长寿的兔子
张三家里养了一对刚出生的兔子, 兔子出生第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;
}

部分运行结果

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值