63. 三角形是一个永不过时的话题

63. 三角形是一个永不过时的话题

题目描述

    欢迎参加程序设计竞赛~

    程序设计竞赛中有着很多有意思的问题,其中,与三角形有关的问题就经常出现。今天你要解决的,就是其中最简单的一个问题:

    给定平面直角坐标系上的 N 个点,保证这 N 个点中任意三点都不共线。求任意三点能够构成的三角形中,面积最大的三角形的面积。

输入:

    输入的第一行是一个整数 T(1 <= T <= 10),表示一共有 T 组用例。

    每组用例的第一行为一个整数 N(3 <= n <= 100),表示平面上点的个数。
    接下来的 N 行,每行包含两个用空格隔开的整数 Xi 和 Yi(-1000 <= Xi, Yi <= 1000),表示第 i 个点的坐标(Xi, Yi)。

输出:

    每组用例输出一个数,表示最大的三角形的面积,结果保留一位小数。

输入样例:
2
4
-1 1
1 1
1 -1
-1 -1
3
-1 -1
3 0
0 0

输出样例:
2.0
1.5

  测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
  1. 2↵
  2. 4↵
  3. -1 1↵
  4. 1 1↵
  5. 1 -1↵
  6. -1 -1↵
  7. 3↵
  8. -1 -1↵
  9. 3 0↵
  10. 0 0↵
以文本方式显示
  1. 2.0↵
  2. 1.5↵
无限制 64M 0
测试用例 2 以文本方式显示
  1. 2↵
  2. 6↵
  3. 401 -484↵
  4. 729 -570↵
  5. 644 886↵
  6. -627 -240↵
  7. -860 452↵
  8. 412 -758↵
  9. 18↵
  10. 223 872↵
  11. -161 324↵
  12. -967 -770↵
  13. -392 -165↵
  14. -755 -184↵
  15. 725 226↵
  16. 360 275↵
  17. -96 -896↵
  18. -984 -45↵
  19. 941 -669↵
  20. 692 -347↵
  21. 100 -92↵
  22. 797 165↵
  23. 658 878↵
  24. -972 498↵
  25. 108 128↵
  26. -516 895↵
  27. 661 -175↵
以文本方式显示
  1. 1185944.0↵
  2. 1565634.5↵
1秒 64M 0
测试用例 3 以文本方式显示
  1. 2↵
  2. 23↵
  3. -613 -557↵
  4. 852 456↵
  5. -989 877↵
  6. 348 280↵
  7. -986 -937↵
  8. -222 282↵
  9. -326 -14↵
  10. -396 46↵
  11. 29 -307↵
  12. 96 990↵
  13. -770 752↵
  14. 210 -105↵
  15. 669 -453↵
  16. 90 197↵
  17. 961 763↵
  18. -894 -259↵
  19. 793 -547↵
  20. -866 -735↵
  21. -908 -363↵
  22. -540 928↵
  23. -300 -303↵
  24. -978 -68↵
  25. -336 -967↵
  26. 39↵
  27. 240 58↵
  28. -966 161↵
  29. 194 -191↵
  30. 820 71↵
  31. 581 679↵
  32. 337 323↵
  33. -254 -731↵
  34. -569 494↵
  35. 872 942↵
  36. 255 -976↵
  37. -559 946↵
  38. 998 -63↵
  39. 759 -540↵
  40. 452 13↵
  41. -457 -307↵
  42. 972 -905↵
  43. 868 -846↵
  44. -701 -1↵
  45. -321 436↵
  46. 837 118↵
  47. 470 -809↵
  48. 836 -366↵
  49. -869 389↵
  50. 690 -195↵
  51. 695 -60↵
  52. -415 -797↵
  53. -705 -475↵
  54. -8 -516↵
  55. 389 798↵
  56. 633 726↵
  57. 465 362↵
  58. 961 247↵
  59. 450 719↵
  60. 784 -623↵
  61. -433 16↵
  62. -182 -969↵
  63. 179 389↵
  64. -707 -993↵
  65. -407 184↵
以文本方式显示
  1. 1768479.0↵
  2. 1736443.0↵
1秒 64M 0

 

【分析】:

感觉很难,只能想到非常愚蠢的暴力做法!用三重循环遍历所有的点来求最大值。三角形面积因为给了坐标,可以用叉乘来计算

【代码】:

#include <stdio.h>
#include <math.h>
int main(void) {
	int T = 0;
	scanf("%d", &T);
	for (; T > 0; T--) {
		int n = 0; double S = 0;
		scanf("%d", &n);
		int x[120], y[120];
		for (int i = 0; i < n; i++) scanf("%d %d", &x[i], &y[i]);
		for(int i=0;i+2<n;i++)
			for(int j=i+1;j+1<n;j++)
				for (int k = i + 2; k < n; k++) {
					double t =fabs( ((x[j] - x[i]) * (y[k] - y[i]) - (x[k] - x[i]) * (y[j] - y[i]))*0.5 );
					S = S > t ? S : t;
				}
		printf("%.1f\n", S);
	}
}

 

posted @ 2022-12-29 12:52  我千五可以  阅读(249)  评论(0)    收藏  举报