【C++求解数学题】大圆圈里面三角形个数相等

本文介绍的问题是一道来自于二年级(上)数学的练习题。

问题

在下图中画8个 Δ \Delta Δ,使每个大圆圈里都有4个 Δ \Delta Δ.
在这里插入图片描述

示例:
在这里插入图片描述

每个大圆圈里面均有4个 Δ \Delta Δ.

方法

按照“变量-范围-条件”的三段式穷举法解题框架,对本问题进行求解。

首先,确定需要定义的变量个数。由于三个大圆圈分割成了五个区域,在这五个区域里面均可以画三角形,因此将这五个区域内三角形的个数设为变量 a , b , c , d , e a,b,c,d,e a,b,c,d,e

其次,确定每个变量的变化范围。由于每个区域内三角形的个数变化范围是 0 ∼ 8 0\sim8 08,据此可以确定每个变量的范围。

最后,满足题目要求的条件有四项,分别是:

  • 第一个圆圈的三角形数量之和是8即 a + b = 4 a+b=4 a+b=4;
  • 第二个圆圈的三角形数量之和是8即 b + c + d = 4 b+c+d=4 b+c+d=4;
  • 第三个圆圈的三角形数量之和是8即 d + e = 4 d+e=4 d+e=4;
  • 所有圆圈的三角形数量之和是8即 a + b + c + d + e = 8 a+b+c+d+e=8 a+b+c+d+e=8.
    在这里插入图片描述

根据上述三段式解题框架对问题进行分析后,可以得到C++求解程序如下:

#include <iostream>
using namespace std;

int main()
{
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    int e = 0;

    for(a = 0; a < 5; a++)
        for(b = 0; b < 5; b++)
            for(c = 0; c < 5; c++)
                for(d = 0;  d < 5; d++)
                    for(e = 0; e < 5; e++)
                    {
                        if(
                            (a + b == 4) &&
                            (b + c + d == 4) &&
                            (d + e == 4) &&
                            (a + b + c + d + e == 8)
                        )
                        	cout<<"a="<<a<<",b="<<b<<",c="<<c<<",d="<<d<<",e="<<e<<endl;
                    }

    return 0;
}

程序运行结果为:

a=0,b=4,c=0,d=0,e=4
a=1,b=3,c=0,d=1,e=3
a=2,b=2,c=0,d=2,e=2
a=3,b=1,c=0,d=3,e=1
a=4,b=0,c=0,d=4,e=0

变量 a , b , c , d , e a,b,c,d,e a,b,c,d,e五个变量的数值即为五个区域要画的三角形数量。

结语

本题的难点在于如何将普通的文字描述问题转化为计算机能够求解的数学问题,这种转化思维即为“计算思维”,计算思维能力的培养需要大量的、长时间的训练方可形成。

本文是“变量-范围-条件”三段式穷举法解题框架的具体应用,如需了解更加的关于该框架求解数学问题的应用案例,欢迎订阅本付费专栏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法与编程之美

欢迎关注『算法与编程之美』

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值