• 这个是目前网上争论比较多一个题目。大家想下用程序怎么解?

    2016/09/27 kingecg 17 评论

网友为小学数学竞赛题吵翻天:到底有几个三角形?

一共有多少三角形?

10 2 收藏


直接登录
最新评论
  • kingecg   2016/09/27

    我的理解:

    本题目可以看作一个寻路问题:

    1)先从最外层的任一定点出发,沿其相连的边如果经过2个转折可以回到出发点,则认为

    是一个三角形,记录下路径。

    2)枚举完step 1中出发点相关的三角形后,从图中删除该出发点和相连的边。然后对剩下的图重复step 1.

    直到最后找不出三角形为止。

    需要建模的数据:

    点:序号,坐标

    边:起始点,斜率

    • 空城   2016/09/29

      你的思路已经很成熟了,但是需要建模的数据没抽象出来,怎么还牵涉到坐标与斜率了,那这个建模就非常复杂了,我认为就是点到点的建模,建立一个11*11列的矩阵,再根据你的两部设想,即可轻松搞定

  • 也可以建模顶点及其共线点,3层循环解决

  • 146个三角形。一共十一个点,没个三角形有三个点。C11 3=165,在同一天直线上的三个点不能组成三角形,共7条边(3个点的三条,4个点的4条),3*C3 3+4*C4 3=19。165-19=146个。

  • 怒打装13犯   2016/09/29

    从所有线段中任意取出三条,将这三条线段的端点(共6个)去除重复点后如果只得到3个点且这3个点不共线,那么就能构成一个三角形。

  • 空城   2016/09/29

    总共11个点,每两个点之间有联通的设置权值为1(不分长短都设置为1),建立

    11行*11列的矩阵,从第一行第一列的点出发,遍历第一行其余10个点,若有遍历到的权值为1,则根据遍历到的点去找相应行的点,如遍历到第一行第二列的权值为1,则再去查找相应的第二行,依次遍历第二行,若有遍历到第二行某个列的权值为1,则再根据遍历到的点去找相应行的点,如遍历到第二行第三列的权值为1,则再去查找相应的第三行,然后到目前为止总共找了两个列点,再看第三行到发起列(即第一列)的权值是否为1,若为1,则构成三角形,后续的依次类推,即可。。。。。。

  • Loranzo_ 开发工程师 2016/09/29

    int[] LINE_01 = {A, B, H};
    int[] LINE_02 = {A, C, F, I};
    int[] LINE_03 = {A, D, G, J};
    int[] LINE_04 = {A, E, K};
    int[] LINE_05 = {B, C, D, E};
    int[] LINE_06 = {H, F, G, E};
    int[] LINE_07 = {H, I, J, K};

    点赋值,设线段。
    任意三个数组并集,长度等于三个数组总长度-3
    则三角形数量加1。
    三层循环。

    不过好像效率不高。

  • sdkl   2016/09/29

    http://www.matrix67.com/blog/archives/276看第8题

    用邻接矩阵自乘3次,把结果的m[i][j]中i==j的加起来再除以2应该就是结果了

  • 王念一 高一学生 2016/10/02

    随便一数就过18了……

  • LongLive 软件工程师 2016/11/02

    不低于23个…

  • 不二   2016/11/22

    计算最外围三角形的5个交点中,每一个交点所衍射出的任意两条与最外围三角形边相交的线段间的交线的总和,为三角形的总数

  • 风中2叔公   02/11

    三角形是由三个点与相连点与点之间的直线组成。

    1.先寻找所有的点并依次编号

    2.嵌套三层循环代表可能成为三角形的点去遍历。如点a,b,c,d,e,f,l。则a,b,c a,b,d… e,f,l地遍历。

    3.遍历中,发现三点均有直线相连,则总数++。

    4.最后输出总数。

    新人报道,不知这样猜想可否有误,而主要核心问题是如何判断三点间是否有直线相连。(唯一最笨的想法是另建立数组去记录所有遍历出的线,如a,b,c,d,e则可能有ab ac ad bd ….,最后三点中判断是否有点与点的线。)