思路

穷举。
可以做一些优化。例如写成下面这样,
for (int x = 1; x < 10; x++)
for (int y = x + 2; y < 10; y++)
for (int z = y + 2; z < 10; z++)
可以确保 3 个数之间互不相同,互不相邻,且没有重复组合。

代码

  1. #include <iostream>
  2. int main()
  3. {
  4. const int MAX = 8; // 9 和 8 已经确定了,只能选择 [1, 7]
  5. const int c = 9;
  6. const int k = 8;
  7. // 李家
  8. for (int a = 1; a < MAX; a++)
  9. {
  10. for (int b = a + 2; b < c - 1; b++)
  11. {
  12. // 每家总分为15
  13. if (15 != a + b + c)
  14. {
  15. continue;
  16. }
  17. // 第二家
  18. for (int i = 1; i < MAX; i++)
  19. {
  20. for (int j = i + 2; j < k - 1; j++)
  21. {
  22. // 每家总分为15
  23. if (15 != i + j + k)
  24. {
  25. continue;
  26. }
  27. // 没有相同的名次,即 [1, 9] 每个数字只能使用一次
  28. if (i == a || i == b || i == c ||
  29. j == a || j == b || j == c ||
  30. k == a || k == b || k == c )
  31. {
  32. continue;
  33. }
  34. // 第三家
  35. for (int x = 1; x < MAX; x++)
  36. {
  37. for (int y = x + 2; y < MAX; y++)
  38. {
  39. for (int z = y + 2; z < MAX; z++)
  40. {
  41. // 每家总分为15
  42. if (15 != x + y + z)
  43. {
  44. continue;
  45. }
  46. // 没有相同的名次,即 [1, 9] 每个数字只能使用一次
  47. if (x == a || x == b || x == c ||
  48. y == a || y == b || y == c ||
  49. z == a || z == b || z == c ||
  50. x == i || x == j || x == k ||
  51. y == i || y == j || y == k ||
  52. z == i || z == j || z == k )
  53. {
  54. continue;
  55. }
  56. // 符合要求,最后一名即 1 分
  57. if (1 == a) std::cout << "L";
  58. if (1 == i) std::cout << "W";
  59. if (1 == x) std::cout << "Z";
  60. return 0;
  61. }
  62. }
  63. }
  64. }
  65. }
  66. }
  67. }
  68. return 0;
  69. }

2020-01-01 00:08:55 星期三

点赞(0)
 

8.7 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论