#include <stdio.h> void ordinal_fill(int vec[], int N, int n, int k) { for (int i = 0; i < N; ++i) { int r = (k * n) % (N - i); if (r < n) { vec[i] = 1; k = (k * n) / (N - i); --n; } else { vec[i] = 0; k = (k * (N - n)) / (N - i); } } } int main(void) { int N = 11, n = 3; int vec[N]; int combs = 1; for (int i = 0; i < n; ++i) { combs *= N - i; combs /= i + 1; } for (int k = 0; k < combs; ++k) { ordinal_fill(vec, N, n, k); } return 0; }
Standard input is empty
0: 11100000000 1: 01110000000 2: 00111000000 3: 00011100000 4: 10110000000 5: 00000000111 6: 01000000101 7: 00010000101 8: 10000000101 9: 00010000101 10: 01000010010 11: 10000010010 12: 00100010010 13: 00010010010 14: 01000100010 15: 10000100010 16: 00001100010 17: 00100100010 18: 00010100010 19: 11000000010 20: 01010000010 21: 00110000010 22: 10100000010 23: 00110000010 24: 01100000010 25: 00001001100 26: 10000011000 27: 00100101000 28: 01000011000 29: 00010101000 30: 10001000100 31: 00000010101 32: 00100011000 33: 10010000100 34: 01001000100 35: 00001011000 36: 00001011000 37: 11000000100 38: 01010000100 39: 00011000100 40: 00000100110 41: 10100000100 42: 01100000100 43: 00110000100 44: 10001010000 45: 00010010100 46: 00000110100 47: 01001010000 48: 10000110000 49: 00010001010 50: 00010001010 51: 01000110000 52: 10010001000 53: 00101010000 54: 00010101000 55: 11000001000 56: 01010001000 57: 00001101000 58: 00100110000 59: 10100001000 60: 00011010000 61: 01001001000 62: 00110001000 63: 10000011000 64: 00110001000 65: 01100001000 66: 10010001000 67: 00001000101 68: 00101001000 69: 01000011000 70: 10000101000 71: 00010000110 72: 00000011001 73: 00100010100 74: 11000000001 75: 01010001000 76: 00000100110 77: 10100000001 78: 00000100110 79: 01000101000 80: 00010010100 81: 10001100000 82: 00000110001 83: 01100000001 84: 00110001000 85: 10010000001 86: 00010011000 87: 00000110001 88: 10000010100 89: 01001100000 90: 00010100010 91: 00010100010 92: 11000000010 93: 01010000001 94: 00100001100 95: 00011001000 96: 10100000010 97: 01000010100 98: 00001100010 99: 10010000010 100: 00101100000 101: 00010101000 102: 01000110000 103: 10001000010 104: 00110000001 105: 00110000001 106: 01100000010 107: 10000010001 108: 00000100110 109: 00100010100 110: 11001000000 111: 01010000010 112: 00011100000 113: 00000000111 114: 10101000000 115: 00100110000 116: 01001000010 117: 00000100101 118: 10011000000 119: 00000100101 120: 01000010001 121: 10001010000 122: 00010010100 123: 00001100100 124: 01101000000 125: 10000101000 126: 00110000010 127: 00010110000 128: 00000101100 129: 11000001000 130: 01011000000 131: 00011000001 132: 10100001000 133: 00011000001 134: 01001010000 135: 00100010001 136: 10000011000 137: 00010100001 138: 01000101000 139: 00000001110 140: 10000101000 141: 00100001100 142: 00010000110 143: 10001001000 144: 01000000110 145: 00111000000 146: 00111000000 147: 11010000000 148: 01100001000 149: 00000110100 150: 00101010000 151: 10110000000 152: 01000011000 153: 00010010001 154: 10000010010 155: 00000110100 156: 00100101000 157: 01000101000 158: 10001100000 159: 00000101010 160: 00000101010 161: 01001001000 162: 10000000110 163: 00010100010 164: 00001101000