找回密码
 欢迎注册
查看: 26501|回复: 17

[求助] 三角形计数

[复制链接]
发表于 2018-3-27 22:34:46 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
我女儿的数学题,以三乘五单位网格(边长为2*4的长方形分割为单位正方形)中格点为顶点的三角形中有多少个面积为三。我数来数去24个,可是标准答案是28,感觉答案有问题,和大家求证一下
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-27 22:57:05 | 显示全部楼层
答案是28
  1. #include<cmath>
  2. #include<cstdio>

  3. double d(int x,int y)
  4. {
  5.         return sqrt(x*x+y*y);
  6. }

  7. int main()
  8. {
  9.         int i,j,k,s=0;
  10.         for(i=0;i<13;i++)
  11.                 for(j=i+1;j<14;j++)
  12.                         for(k=j+1;k<15;k++)
  13.                         {
  14.                                 int ix=i/5,iy=i%5,jx=j/5,jy=j%5,kx=k/5,ky=k%5;
  15.                                 double a=d(ix-jx,iy-jy),b=d(ix-kx,iy-ky),c=d(jx-kx,jy-ky),p=(a+b+c)/2,r=p*(p-a)*(p-b)*(p-c);
  16.                                 if(r>8.9&&r<9.1)s++;
  17.                         }
  18.         printf("%d",s);
  19. }
复制代码

Untitled.png

把方案输出来,结果如下:
  1. 1:
  2. o..o.
  3. .....
  4. o....
  5. 2:
  6. o..o.
  7. .....
  8. .o...
  9. 3:
  10. o..o.
  11. .....
  12. ..o..
  13. 4:
  14. o..o.
  15. .....
  16. ...o.
  17. 5:
  18. o..o.
  19. .....
  20. ....o
  21. 6:
  22. o....
  23. ...o.
  24. o....
  25. 7:
  26. o....
  27. ....o
  28. ..o..
  29. 8:
  30. o....
  31. .....
  32. o..o.
  33. 9:
  34. o....
  35. .....
  36. .o..o
  37. 10:
  38. .o..o
  39. .....
  40. o....
  41. 11:
  42. .o..o
  43. .....
  44. .o...
  45. 12:
  46. .o..o
  47. .....
  48. ..o..
  49. 13:
  50. .o..o
  51. .....
  52. ...o.
  53. 14:
  54. .o..o
  55. .....
  56. ....o
  57. 15:
  58. .o...
  59. ....o
  60. .o...
  61. 16:
  62. .o...
  63. .....
  64. o..o.
  65. 17:
  66. .o...
  67. .....
  68. .o..o
  69. 18:
  70. ..o..
  71. o....
  72. ....o
  73. 19:
  74. ..o..
  75. ....o
  76. o....
  77. 20:
  78. ..o..
  79. .....
  80. o..o.
  81. 21:
  82. ..o..
  83. .....
  84. .o..o
  85. 22:
  86. ...o.
  87. o....
  88. ...o.
  89. 23:
  90. ...o.
  91. .....
  92. o..o.
  93. 24:
  94. ...o.
  95. .....
  96. .o..o
  97. 25:
  98. ....o
  99. o....
  100. ..o..
  101. 26:
  102. ....o
  103. .o...
  104. ....o
  105. 27:
  106. ....o
  107. .....
  108. o..o.
  109. 28:
  110. ....o
  111. .....
  112. .o..o


  113. Process exited normally.
  114. Press any key to continue . . .
复制代码

原来是这4个怪胎在作怪  
  1. 7:
  2. o....
  3. ....o
  4. ..o..
  5. 18:
  6. ..o..
  7. o....
  8. ....o
  9. 19:
  10. ..o..
  11. ....o
  12. o....
  13. 25:
  14. ....o
  15. o....
  16. ..o..
复制代码

输出方案的代码如下:
  1. #include<cmath>
  2. #include<cstdio>

  3. double d(int x,int y)
  4. {
  5.         return sqrt(x*x+y*y);
  6. }

  7. int main()
  8. {
  9.         int i,j,k,l,s=0;
  10.         for(i=0;i<13;i++)
  11.                 for(j=i+1;j<14;j++)
  12.                         for(k=j+1;k<15;k++)
  13.                         {
  14.                                 int ix=i/5,iy=i%5,jx=j/5,jy=j%5,kx=k/5,ky=k%5;
  15.                                 double a=d(ix-jx,iy-jy),b=d(ix-kx,iy-ky),c=d(jx-kx,jy-ky),p=(a+b+c)/2,r=p*(p-a)*(p-b)*(p-c);
  16.                                 if(r>8.9&&r<9.1)
  17.                                 {
  18.                                         printf("%d:\n",++s);
  19.                                         for(l=0;l<15;l++)
  20.                                         {
  21.                                                 if(l==i||l==j||l==k)printf("o");
  22.                                                 else printf(".");
  23.                                                 if(l%5>3)puts("");
  24.                                         }
  25.                                 }
  26.                         }
  27. }
复制代码

点评

这样的问题,其实告诉小孩子答案就好,穷举法就是最好的办法,没啥特别好的办法  发表于 2018-3-28 11:36

评分

参与人数 1威望 +3 金币 +6 贡献 +3 经验 +3 鲜花 +12 收起 理由
mathe + 3 + 6 + 3 + 3 + 12 赞一个!

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 11:33:22 | 显示全部楼层
  1. (*三角形计数*)
  2. Clear["Global`*"];(*Clear all variables*)
  3. (*把所有的点坐标化,方便使用行列式来计算三角形的面积*)
  4. kk=1;
  5. mm={
  6. {0,0,kk},{1,0,kk},{2,0,kk},{3,0,kk},{4,0,kk},
  7. {0,1,kk},{1,1,kk},{2,1,kk},{3,1,kk},{4,1,kk},
  8. {0,2,kk},{1,2,kk},{2,2,kk},{3,2,kk},{4,2,kk}
  9. };
  10. (*使用穷举法来解决问题*)
  11. num=0;
  12. Do[
  13. pa=mm[[i]];
  14. pb=mm[[j]];
  15. pc=mm[[k]];
  16. (*如果符合要求,那么输出三点的坐标以及次序*)
  17. If[i<j&&j<k&&Abs@Det[{pa,pb,pc}]==3*2,num=num+1;Print[{pa,pb,pc,num}]],
  18. {i,1,15},
  19. {j,1,15},
  20. {k,1,15}
  21. ]
复制代码


这个问题最适合穷举法

{{0,0,1},{3,0,1},{0,2,1},1}

{{0,0,1},{3,0,1},{1,2,1},2}

{{0,0,1},{3,0,1},{2,2,1},3}

{{0,0,1},{3,0,1},{3,2,1},4}

{{0,0,1},{3,0,1},{4,2,1},5}

{{0,0,1},{3,1,1},{0,2,1},6}

{{0,0,1},{4,1,1},{2,2,1},7}

{{0,0,1},{0,2,1},{3,2,1},8}

{{0,0,1},{1,2,1},{4,2,1},9}

{{1,0,1},{4,0,1},{0,2,1},10}

{{1,0,1},{4,0,1},{1,2,1},11}

{{1,0,1},{4,0,1},{2,2,1},12}

{{1,0,1},{4,0,1},{3,2,1},13}

{{1,0,1},{4,0,1},{4,2,1},14}

{{1,0,1},{4,1,1},{1,2,1},15}

{{1,0,1},{0,2,1},{3,2,1},16}

{{1,0,1},{1,2,1},{4,2,1},17}

{{2,0,1},{0,1,1},{4,2,1},18}

{{2,0,1},{4,1,1},{0,2,1},19}

{{2,0,1},{0,2,1},{3,2,1},20}

{{2,0,1},{1,2,1},{4,2,1},21}

{{3,0,1},{0,1,1},{3,2,1},22}

{{3,0,1},{0,2,1},{3,2,1},23}

{{3,0,1},{1,2,1},{4,2,1},24}

{{4,0,1},{0,1,1},{2,2,1},25}

{{4,0,1},{1,1,1},{4,2,1},26}

{{4,0,1},{0,2,1},{3,2,1},27}

{{4,0,1},{1,2,1},{4,2,1},28}

点评

是的,但是题目的确不适合小朋友  发表于 2018-3-28 11:42
正好28个  发表于 2018-3-28 11:34
答案是正确的  发表于 2018-3-28 11:33
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 12:03:54 | 显示全部楼层
本帖最后由 mathematica 于 2018-3-28 12:06 编辑
  1. (*三角形计数*)
  2. Clear["Global`*"];(*Clear all variables*)
  3. (*把所有的点坐标化,方便使用行列式来计算三角形的面积*)
  4. kk=1;
  5. mm={
  6. {0,0,kk},{1,0,kk},{2,0,kk},{3,0,kk},{4,0,kk},
  7. {0,1,kk},{1,1,kk},{2,1,kk},{3,1,kk},{4,1,kk},
  8. {0,2,kk},{1,2,kk},{2,2,kk},{3,2,kk},{4,2,kk}
  9. };
  10. (*使用穷举法来解决问题*)
  11. num=0;
  12. all={};
  13. Do[
  14. pa=mm[[i]];
  15. pb=mm[[j]];
  16. pc=mm[[k]];
  17. (*如果符合要求,那么输出三点的坐标以及次序*)
  18. If[i<j&&j<k&&Abs@Det[{pa,pb,pc}]==3*2,num=num+1;all=Append[all,{pa,pb,pc}]],
  19. {i,1,15},
  20. {j,1,15},
  21. {k,1,15}
  22. ];
  23. Print[all];
  24. (*求出三角形三边的所有的边长,并且排序*)
  25. data=Sort[{EuclideanDistance[#[[1]],#[[2]]],EuclideanDistance[#[[1]],#[[3]]],EuclideanDistance[#[[2]],#[[3]]]}]&/@all
  26. (*合并所有的相同的全等的三角形*)
  27. Length@Union[data]
复制代码



考虑所有的全等的三角形

\[\left(
\begin{array}{ccc}
2 & 3 & \sqrt{13} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
2 & 3 & \sqrt{13} \\
3 & \sqrt{5} & 2 \sqrt{5} \\
2 & \sqrt{10} & \sqrt{10} \\
2 \sqrt{2} & \sqrt{5} & \sqrt{17} \\
2 & 3 & \sqrt{13} \\
3 & \sqrt{5} & 2 \sqrt{5} \\
3 & \sqrt{5} & 2 \sqrt{5} \\
2 & 3 & \sqrt{13} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
2 & 3 & \sqrt{13} \\
2 & \sqrt{10} & \sqrt{10} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
2 & 3 & \sqrt{13} \\
2 \sqrt{2} & \sqrt{5} & \sqrt{17} \\
2 \sqrt{2} & \sqrt{5} & \sqrt{17} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
2 & \sqrt{10} & \sqrt{10} \\
2 & 3 & \sqrt{13} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
2 \sqrt{2} & \sqrt{5} & \sqrt{17} \\
2 & \sqrt{10} & \sqrt{10} \\
3 & \sqrt{5} & 2 \sqrt{5} \\
2 & 3 & \sqrt{13} \\
\end{array}
\right)\]

全等后的三角形的三边的边长
\[\left(
\begin{array}{ccc}
2 & 3 & \sqrt{13} \\
2 & \sqrt{10} & \sqrt{10} \\
3 & 2 \sqrt{2} & \sqrt{5} \\
3 & \sqrt{5} & 2 \sqrt{5} \\
2 \sqrt{2} & \sqrt{5} & \sqrt{17} \\
\end{array}
\right)\]
总共是5个

点评

data=Sort[{EuclideanDistance[#[[1]],#[[2]]],EuclideanDistance[#[[1]],#[[3]]],EuclideanDistance[#[[2]],#[[3]]]},#1>#2&]&/@all  发表于 2018-3-28 12:11
如果考虑全等的话,那么正好只有5个三角形  发表于 2018-3-28 12:05
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 14:40:50 | 显示全部楼层
  1. Table[{x,y},{x,0,4},{y,0,2}]//Flatten[#,1]&//Subsets[#,{3}]&//Select[#,(PadRight[#,{3,3},1/2]//Det//Abs//#==3&)&]&//MapIndexed[{#2[[1]],#1,(#1//Append[#,#[[1]]]&//ListLinePlot[{{{0,0},{4,0},{4,2},{0,2},{0,2}},#},AspectRatio->1/2]&)}&,#]&
复制代码


其中{{0, 0}, {2, 2}, {3, 0}}与“怪胎”{{0, 0}, {2, 2}, {4, 1}}是同底({0, 0}, {2, 2})等高转换,容易忽略,却也不算超前。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 14:51:47 | 显示全部楼层
我也试了一下,第一次,得到跟mathe一样的答案,明白mathe为什么得出24的答案了.,mathe在计算这题的时候并没有乖乖的一个一个的枚举,而是直接分类穷举.

1)计算非直角的三角形.
1.1)三角形一边是水平的,3*2*2 = 12
1.2)三角形一边是竖直的,2*2 = 4
2)直角三角形,既有水平的边,又有竖直方向的边
2.1)4+4 = 8

至此,总共有$2*3*2+2*2+4+4 = 24$
3)三角形三条边都是斜线的情况.这个不宜自信的假设不存在.要回溯到前面所有的情况,对前面枚举到的所有的三角形,试着对三个边分别做等高的平移尝试,使得三条边都是斜线,发现总共有4个怪胎.如zeroieme所言.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2018-3-28 15:05:26 | 显示全部楼层
wayne 发表于 2018-3-28 14:51
我也试了一下,第一次,得到跟mathe一样的答案,明白mathe为什么得出24的答案了.,mathe在计算这题的 ...


稍微有点差别,我是不同的分类计算
i)底为3高为2的有5*2*2
ii)底为2高为3的有3*2*2
iii)两者的交集也就是直角三角形4*2
所以总共5*2*2+3*2*2-4*2
我很赞同Fans的怪胎的说法。因为如果我们要考虑三条边是斜线的情况,那么即使找出了这个怪胎,我们又该如何去解释就没有其它的怪胎了呢?难道一一穷举?

点评

这问题本来就最适合穷举法.还有小学的鸡兔同笼问题,本来就最适合穷举法  发表于 2018-3-28 17:33
如果是怪胎,那么必然三边都是无理数,已经被搞出来了  发表于 2018-3-28 17:33
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 15:10:29 | 显示全部楼层
@mathe, 恩,姑且叫带有双重目标的枚举.从一开始枚举的时候就要带着A计划和B计划.A计划就是肉眼扫描,依据自己定的大类的标准,扫描出所有的符合大类的三角形.B计划就是在符合当前大类的情况下,顺便再做进一步的平移操作,看是否能构造出等面积的三边都是斜边的三角形
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 16:42:06 | 显示全部楼层
本帖最后由 zeroieme 于 2018-3-28 16:43 编辑

无法上传图片,就试着文字描述

假设三角形AMN的外接矩形为ABCD。线段 AB与CD为矩形对边,长度为a。线段 BC与DA为矩形对边,长度为b。M在CD上,CM长度为c。N在BC上,CN长度为d。
那么三角形AMN面积\(a b-\frac{1}{2} c d-\frac{1}{2} b (a-c)-\frac{1}{2} a (b-d)=\frac{1}{2} (a d+b c-c d)=3\)并\(a\geq 4\land b\geq 2\land a\geq b\land a\geq c\land b\geq d\)的自然数解也是容易穷尽的。
再以全等分类,平移反射记数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2018-3-28 17:23:52 | 显示全部楼层
mathe 发表于 2018-3-28 15:05
稍微有点差别,我是不同的分类计算
i)底为3高为2的有5*2*2
ii)底为2高为3的有3*2*2

由最小的勾股数是
3^2+4^2=5^2
而最大坐标是(2,4)
所以推测三角形至少有一边是无理数
可以分三种情况
1\只有一边是无理数
2\只有两边是无理数
3\三边都是无理数
这样分类应该不会出问题
看四楼的矩阵,三边都是无理数的三角形正好是四个
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 20:55 , Processed in 0.046822 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表