当前位置:   article > 正文

C++写的无限嵌套循环(全排列组合)_c++代码多轮排序合成大循环

c++代码多轮排序合成大循环

C++写的无限循环代码

  1. const int l = 3;
  2. int aa[] = { 1, 2, 3, 5, 7, 9, 11, 13, 15 }, bb[l] = { 0 }, g = l, d = sizeof(aa) / sizeof(aa[0]);
  3. while (bb[0] < d)
  4. {
  5. while (--g)//无限嵌套逐级运算
  6. if (g > 0 && bb[g] >= d)
  7. {
  8. bb[g] = 0;
  9. ++bb[g - 1];
  10. std::cout << endl;//附加的显示部分
  11. }
  12. if (bb[l - 1] < d)//显示部分没写循环
  13. {
  14. std::cout << aa[bb[0]] << "+" << aa[bb[1]] << "+" << aa[bb[2]] << "=" << aa[bb[0]] + aa[bb[1]] + aa[bb[2]] << "; ";
  15. if (aa[bb[0]] + aa[bb[1]] + aa[bb[2]] == 30)break;
  16. }
  17. ++bb[l - 1];
  18. g = l;
  19. }

原来的嵌套循环写法

  1. int aa[] = { 1, 2, 3, 5, 7, 9, 11, 13, 15 }, a = 0, b = 0, c = 0, d = sizeof(aa) / sizeof(aa[0]);
  2. while (a < d)
  3. {
  4. std::cout << aa[a] << "+" << aa[b] << "+" << aa[c] << "=" << aa[a] + aa[b] + aa[c] << "; ";
  5. if (aa[a] + aa[b] + aa[c] == 30)
  6. {
  7. std::cout << aa[a] << aa[b] << aa[c] << "^_^";
  8. break;
  9. }
  10. if (++c >= d)
  11. {
  12. ++b;
  13. c = 0;
  14. std::cout << endl;
  15. }
  16. if (b >= d)
  17. {
  18. ++a;
  19. b = 0;
  20. }
  21. }

检查唯一性。

  1. /**/const int l = 3;
  2. int aa[] = { 1, 3, 5, 7, 9, 11, 13, 15 }, bb[l] = { 0 }, g = l, j = 0, t = 0, d = sizeof(aa) / sizeof(aa[0]);
  3. while (bb[0] < d)
  4. {
  5. while (--g)//无限嵌套逐级运算
  6. {
  7. if (g > 0 && bb[g] >= d)
  8. {
  9. bb[g] = 0;
  10. ++bb[g - 1];
  11. g = l;//检查唯一序
  12. std::cout << endl;//附加的显示部分
  13. }
  14. j = 0;//检查唯一序
  15. while (!t && j < g) if (bb[j] == bb[g]) t = 1; else ++j;
  16. }
  17. if (!t && bb[l - 1] < d && bb[0] < d)//计算与显示部分没写循环
  18. {
  19. std::cout << aa[bb[0]] << "+" << aa[bb[1]] << "+" << aa[bb[2]] << "=" << aa[bb[0]] + aa[bb[1]] + aa[bb[2]] << "; ";
  20. if (aa[bb[0]] + aa[bb[1]] + aa[bb[2]] == 30)break;
  21. }
  22. ++bb[l - 1];
  23. j = t = 0;
  24. g = l;
  25. }

全面循环代码

  1. /**/const int 数量 = 8;
  2. int 数据[] = { 1, 3, 5, 7, 9, 11, 13, 15 }, 嵌套[数量] = { 0 }, 逐级 = 数量, 检查 = 0, 状态 = 0, 长度 = sizeof(数据) / sizeof(数据[0]);
  3. while (嵌套[0] < 长度)
  4. {
  5. while (--逐级)//无限嵌套逐级运算
  6. {
  7. if (逐级 > 0 && 嵌套[逐级] >= 长度)
  8. {
  9. 嵌套[逐级] = 0;
  10. ++嵌套[逐级 - 1];
  11. 逐级 = 数量;//检查唯一序
  12. //std::cout << endl;附加的显示部分
  13. }
  14. 检查 = 0;//检查唯一序
  15. while (!状态 && 检查 < 逐级) if (嵌套[检查] == 嵌套[逐级]) 状态 = 1; else ++检查;
  16. }
  17. if (!状态 && 嵌套[数量 - 1] < 长度 && 嵌套[0] < 长度)//计算与显示部分没写循环
  18. {
  19. 检查 = 0;//重复利用的变量
  20. while (逐级 < 数量)
  21. {
  22. 检查 += 数据[嵌套[逐级]];
  23. std::cout << (数据[嵌套[逐级]] > 9 ? "" : "0") << 数据[嵌套[逐级]] << (逐级 >= 数量 - 1 ? " = " : "+");
  24. ++逐级;
  25. }
  26. std::cout << (检查 > 9 ? "" : "0") << 检查 << "; ";
  27. //if (检查 == 30)break;
  28. }
  29. ++嵌套[数量 - 1];
  30. 检查 = 状态 = 0;
  31. 逐级 = 数量;
  32. }

运行实例

另外答复了提问https://bbs.csdn.net/topics/392520005

  1. int 数据[] = { 1, 2, 3, 5, 7, 9, 11, 13, 15 }, 长度 = sizeof(数据) / sizeof(数据[0]),
  2. 嵌套[sizeof(数据) / sizeof(数据[0])] = { 0 }, 逐级 = 长度, 检查 = 0, 状态 = 0,
  3. 最大值 = 0, 取值 = 0;
  4. while (嵌套[0] < 长度)
  5. {
  6. while (--逐级)//无限嵌套逐级运算
  7. {
  8. if (逐级 > 0 && 嵌套[逐级] >= 长度)
  9. {
  10. 嵌套[逐级] = 0;
  11. ++嵌套[逐级 - 1];
  12. 逐级 = 长度;
  13. //std::cout << endl;附加的显示部分
  14. }
  15. 检查 = 0;//检查唯一序
  16. while (!状态 && 检查 < 逐级) if (嵌套[检查] == 嵌套[逐级]) 状态 = 1; else ++检查;
  17. }
  18. if (!状态 && 嵌套[长度 - 1] < 长度 && 嵌套[0] < 长度)//计算与显示部分
  19. {
  20. 检查 = 0;//重复利用的变量
  21. while (逐级 < 长度)
  22. {
  23. if (检查 == 0)检查 += 数据[嵌套[逐级]];
  24. else
  25. {
  26. 取值 = 数据[嵌套[逐级]];
  27. while (取值) { 检查 *= 10; 取值 /= 10; }
  28. 检查 += 数据[嵌套[逐级]];
  29. }
  30. if (最大值 < 检查)最大值 = 检查;
  31. //std::cout << (数据[嵌套[逐级]] > 9 ? "" : "0") << 数据[嵌套[逐级]] << (逐级 >= 长度 - 1 ? " = " : "+");
  32. ++逐级;
  33. }
  34. //std::cout << (检查 > 9 ? "" : "0") << 检查 << "; ";
  35. }
  36. ++嵌套[长度 - 1];
  37. 检查 = 状态 = 0;
  38. 逐级 = 长度;
  39. }std::cout << 最大值;

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/756446
推荐阅读
相关标签
  

闽ICP备14008679号