鱼C论坛

 找回密码
 立即注册
查看: 1282|回复: 1

[已解决]求大佬教一下这道题怎么用c++编程求解

[复制链接]
发表于 2018-2-4 22:50:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
小明被绑架到X星球的巫师W那里。



其时,W正在玩弄两组数据 (2 3 5 8) 和 (1 4 6 7)

他命令小明从一组数据中分别取数与另一组中的数配对,共配成4对(组中的每个数必被用到)。

小明的配法是:{(8,7),(5,6),(3,4),(2,1)}



巫师凝视片刻,突然说这个配法太棒了!



因为:

每个配对中的数字组成两位数,求平方和,无论正倒,居然相等:

87^2 + 56^2 + 34^2 + 21^2  =  12302

78^2 + 65^2 + 43^2 + 12^2  =  12302



小明想了想说:“这有什么奇怪呢,我们地球人都知道,随便配配也可以啊!”

{(8,6),(5,4),(3,1),(2,7)}



86^2 + 54^2 + 31^2 + 27^2 = 12002

68^2 + 45^2 + 13^2 + 72^2 = 12002



巫师顿时凌乱了。。。。。



请你计算一下,包括上边给出的两种配法,巫师的两组数据一共有多少种配对方案具有该特征。

配对方案计数时,不考虑配对的出现次序。

就是说:

{(8,7),(5,6),(3,4),(2,1)}



{(5,6),(8,7),(3,4),(2,1)}

是同一种方案。

最佳答案
2018-2-5 04:40:21
本帖最后由 人造人 于 2018-2-5 05:06 编辑

24种?
我也不知道对不对,毕竟是熬夜写代码的说 ^_^

  1. #include <iostream>
  2. #include <cmath>

  3. typedef struct
  4. {
  5.         int d0;
  6.         int d1;
  7. } Data;

  8. void Swap(int *a, int *b)
  9. {
  10.         int temp = *a;
  11.         *a = *b;
  12.         *b = temp;
  13. }

  14. void ChangeValue(Data data[])
  15. {
  16.         for(int i = 0; i < 4; ++i)
  17.                 Swap(&data[i].d0, &data[i].d1);
  18. }

  19. int GetValue(Data dat)
  20. {
  21.         return dat.d0 * 10 + dat.d1;
  22. }

  23. void Test(Data data[])
  24. {
  25.         int result0 = int(pow(GetValue(data[0]), 2) + pow(GetValue(data[1]), 2) + pow(GetValue(data[2]), 2) + pow(GetValue(data[3]), 2));
  26.         ChangeValue(data);
  27.         int result1 = int(pow(GetValue(data[0]), 2) + pow(GetValue(data[1]), 2) + pow(GetValue(data[2]), 2) + pow(GetValue(data[3]), 2));
  28.        
  29.         ChangeValue(data);        // 改回来吧,虽说不改回来也没什么,只是输出反了
  30.         if(result0 == result1)
  31.                 std::cout << "(" << data[0].d0 << "," << data[0].d1 << ")"
  32.                 << " (" << data[1].d0 << "," << data[1].d1 << ")"
  33.                 << " (" << data[2].d0 << "," << data[2].d1 << ")"
  34.                 << " (" << data[3].d0 << "," << data[3].d1 << ")"
  35.                 << std::endl;
  36. }

  37. int main(void)
  38. {
  39.         const int num0[] = {2, 3, 5, 8};
  40.         const int num1[] = {1, 4, 6, 7};
  41.         Data data[4];

  42.         for(int i = 0; i < 4; ++i)
  43.         {
  44.                 for(int j = 0; j < 4; ++j)
  45.                 {
  46.                         for(int k = 0; k < 4; ++k)
  47.                         {
  48.                                 for(int l = 0; l < 4; ++l)
  49.                                 {
  50.                                         if((i != j) && (i != k) && (i != l) && (j != k) && (j != l) && (k != l))
  51.                                         {
  52.                                                 data[0].d0 = num0[0];
  53.                                                 data[0].d1 = num1[i];
  54.                                                 data[1].d0 = num0[1];
  55.                                                 data[1].d1 = num1[j];
  56.                                                 data[2].d0 = num0[2];
  57.                                                 data[2].d1 = num1[k];
  58.                                                 data[3].d0 = num0[3];
  59.                                                 data[3].d1 = num1[l];

  60.                                                 Test(data);
  61.                                                 /*std::cout << "(" << data[0].d0 << "," << data[0].d1 << ")"
  62.                                                         << " (" << data[1].d0 << "," << data[1].d1 << ")"
  63.                                                         << " (" << data[2].d0 << "," << data[2].d1 << ")"
  64.                                                         << " (" << data[3].d0 << "," << data[3].d1 << ")"
  65.                                                         << std::endl;*/
  66.                                         }
  67.                                 }
  68.                         }
  69.                 }
  70.         }

  71.         return 0;
  72. }
复制代码

  1. (2,1) (3,4) (5,6) (8,7)
  2. (2,1) (3,4) (5,7) (8,6)
  3. (2,1) (3,6) (5,4) (8,7)
  4. (2,1) (3,6) (5,7) (8,4)
  5. (2,1) (3,7) (5,4) (8,6)
  6. (2,1) (3,7) (5,6) (8,4)
  7. (2,4) (3,1) (5,6) (8,7)
  8. (2,4) (3,1) (5,7) (8,6)
  9. (2,4) (3,6) (5,1) (8,7)
  10. (2,4) (3,6) (5,7) (8,1)
  11. (2,4) (3,7) (5,1) (8,6)
  12. (2,4) (3,7) (5,6) (8,1)
  13. (2,6) (3,1) (5,4) (8,7)
  14. (2,6) (3,1) (5,7) (8,4)
  15. (2,6) (3,4) (5,1) (8,7)
  16. (2,6) (3,4) (5,7) (8,1)
  17. (2,6) (3,7) (5,1) (8,4)
  18. (2,6) (3,7) (5,4) (8,1)
  19. (2,7) (3,1) (5,4) (8,6)
  20. (2,7) (3,1) (5,6) (8,4)
  21. (2,7) (3,4) (5,1) (8,6)
  22. (2,7) (3,4) (5,6) (8,1)
  23. (2,7) (3,6) (5,1) (8,4)
  24. (2,7) (3,6) (5,4) (8,1)
  25. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 04:40:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2018-2-5 05:06 编辑

24种?
我也不知道对不对,毕竟是熬夜写代码的说 ^_^

  1. #include <iostream>
  2. #include <cmath>

  3. typedef struct
  4. {
  5.         int d0;
  6.         int d1;
  7. } Data;

  8. void Swap(int *a, int *b)
  9. {
  10.         int temp = *a;
  11.         *a = *b;
  12.         *b = temp;
  13. }

  14. void ChangeValue(Data data[])
  15. {
  16.         for(int i = 0; i < 4; ++i)
  17.                 Swap(&data[i].d0, &data[i].d1);
  18. }

  19. int GetValue(Data dat)
  20. {
  21.         return dat.d0 * 10 + dat.d1;
  22. }

  23. void Test(Data data[])
  24. {
  25.         int result0 = int(pow(GetValue(data[0]), 2) + pow(GetValue(data[1]), 2) + pow(GetValue(data[2]), 2) + pow(GetValue(data[3]), 2));
  26.         ChangeValue(data);
  27.         int result1 = int(pow(GetValue(data[0]), 2) + pow(GetValue(data[1]), 2) + pow(GetValue(data[2]), 2) + pow(GetValue(data[3]), 2));
  28.        
  29.         ChangeValue(data);        // 改回来吧,虽说不改回来也没什么,只是输出反了
  30.         if(result0 == result1)
  31.                 std::cout << "(" << data[0].d0 << "," << data[0].d1 << ")"
  32.                 << " (" << data[1].d0 << "," << data[1].d1 << ")"
  33.                 << " (" << data[2].d0 << "," << data[2].d1 << ")"
  34.                 << " (" << data[3].d0 << "," << data[3].d1 << ")"
  35.                 << std::endl;
  36. }

  37. int main(void)
  38. {
  39.         const int num0[] = {2, 3, 5, 8};
  40.         const int num1[] = {1, 4, 6, 7};
  41.         Data data[4];

  42.         for(int i = 0; i < 4; ++i)
  43.         {
  44.                 for(int j = 0; j < 4; ++j)
  45.                 {
  46.                         for(int k = 0; k < 4; ++k)
  47.                         {
  48.                                 for(int l = 0; l < 4; ++l)
  49.                                 {
  50.                                         if((i != j) && (i != k) && (i != l) && (j != k) && (j != l) && (k != l))
  51.                                         {
  52.                                                 data[0].d0 = num0[0];
  53.                                                 data[0].d1 = num1[i];
  54.                                                 data[1].d0 = num0[1];
  55.                                                 data[1].d1 = num1[j];
  56.                                                 data[2].d0 = num0[2];
  57.                                                 data[2].d1 = num1[k];
  58.                                                 data[3].d0 = num0[3];
  59.                                                 data[3].d1 = num1[l];

  60.                                                 Test(data);
  61.                                                 /*std::cout << "(" << data[0].d0 << "," << data[0].d1 << ")"
  62.                                                         << " (" << data[1].d0 << "," << data[1].d1 << ")"
  63.                                                         << " (" << data[2].d0 << "," << data[2].d1 << ")"
  64.                                                         << " (" << data[3].d0 << "," << data[3].d1 << ")"
  65.                                                         << std::endl;*/
  66.                                         }
  67.                                 }
  68.                         }
  69.                 }
  70.         }

  71.         return 0;
  72. }
复制代码

  1. (2,1) (3,4) (5,6) (8,7)
  2. (2,1) (3,4) (5,7) (8,6)
  3. (2,1) (3,6) (5,4) (8,7)
  4. (2,1) (3,6) (5,7) (8,4)
  5. (2,1) (3,7) (5,4) (8,6)
  6. (2,1) (3,7) (5,6) (8,4)
  7. (2,4) (3,1) (5,6) (8,7)
  8. (2,4) (3,1) (5,7) (8,6)
  9. (2,4) (3,6) (5,1) (8,7)
  10. (2,4) (3,6) (5,7) (8,1)
  11. (2,4) (3,7) (5,1) (8,6)
  12. (2,4) (3,7) (5,6) (8,1)
  13. (2,6) (3,1) (5,4) (8,7)
  14. (2,6) (3,1) (5,7) (8,4)
  15. (2,6) (3,4) (5,1) (8,7)
  16. (2,6) (3,4) (5,7) (8,1)
  17. (2,6) (3,7) (5,1) (8,4)
  18. (2,6) (3,7) (5,4) (8,1)
  19. (2,7) (3,1) (5,4) (8,6)
  20. (2,7) (3,1) (5,6) (8,4)
  21. (2,7) (3,4) (5,1) (8,6)
  22. (2,7) (3,4) (5,6) (8,1)
  23. (2,7) (3,6) (5,1) (8,4)
  24. (2,7) (3,6) (5,4) (8,1)
  25. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 17:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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