• Source
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. struct kab {
    5. int k, a, b;
    6. };
    7.  
    8. const int MAX_K = 1;
    9. const int MAX_A = 3;
    10. const int MAX_B = 3;
    11.  
    12. kab increment(kab obj) {
    13. obj.b = (obj.b + 1) % (MAX_B + 1);
    14. if(obj.b == 0) {
    15. obj.a = (obj.a + 1) % (MAX_A + 1);
    16. if(obj.a == 0) {
    17. obj.k++;
    18. }
    19. }
    20.  
    21. // Ensure a != b by incrementing again if they are
    22. if(obj.a == obj.b) {
    23. return increment(obj);
    24. }
    25.  
    26. return obj;
    27. }
    28.  
    29. int main() {
    30. kab vals;
    31. vals.k = vals.a = 0;
    32. vals.b = 1;
    33.  
    34. while(vals.k <= MAX_K) {
    35. kab vals2 = increment(vals);
    36. while(vals2.k <= MAX_K) {
    37. kab vals3 = increment(vals2);
    38. while(vals3.k <= MAX_K) {
    39. std::cout << "k: " << vals.k << " a: " << vals.a << " b: " << vals.b << std::endl;
    40. std::cout << "k: " << vals2.k << " a: " << vals2.a << " b: " << vals2.b << std::endl;
    41. std::cout << "k: " << vals3.k << " a: " << vals3.a << " b: " << vals3.b << std::endl;
    42. std::cout << std::endl;
    43.  
    44. vals3 = increment(vals3);
    45. }
    46. vals2 = increment(vals2);
    47. }
    48. vals = increment(vals);
    49. }
    50.  
    51. return 0;
    52. }