[关闭]
@sensitive-cs 2016-10-06T04:26:39.000000Z 字数 639 阅读 683

F - Canvas Frames

分析:

给出n条具有一定长度的边,问最多可构成多少个矩形。

思路:

先对n条边进行排序,然后从第一条边开始,对每一种不同的长度的边的数量进行统计。最后,同一种边的数量小于2的直接舍去,若是不小于2的,直接除以2,累加到sum上,最后sum / 2就是矩形的数量。

代码:

  1. #include <stdio.h>
  2. void sortion(int n,int a[]);
  3. int main()
  4. {
  5. int a[110];
  6. int b[110];
  7. int n;
  8. while (scanf("%d",&n) != EOF)
  9. {
  10. int i,j = 0;
  11. int sum = 0;
  12. for (i = 0;i < n;i++)
  13. scanf("%d",&a[i]);
  14. sortion(n,a);
  15. for (i = 0;i < n;i++)
  16. b[i] = 0;
  17. i = 0;
  18. while (i < n)
  19. {
  20. int temp = a[i];
  21. while (i < n)
  22. {
  23. if (temp == a[i])
  24. {
  25. i++;
  26. b[j]++;
  27. }
  28. else
  29. break;
  30. }
  31. j++;
  32. }
  33. for (i = 0;i < n;i++)
  34. {
  35. if (b[i] >= 2)
  36. b[i] /= 2;
  37. else
  38. b[i] = 0;
  39. }
  40. for (i = 0;i < n;i++)
  41. sum += b[i];
  42. printf("%d\n",sum/2);
  43. }
  44. return 0;
  45. }
  46. void sortion(int n,int a[])
  47. {
  48. int i,j;
  49. for (i = 0;i < n;i++)
  50. for (j = i+1;j < n;j++)
  51. {
  52. if (a[i] > a[j])
  53. {
  54. int temp = a[i];
  55. a[i] = a[j];
  56. a[j] = temp;
  57. }
  58. }
  59. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注