#include extern int NextPermutation (int n, int *pr); extern void PrintPermutation (int n, int *pr); void Vypis_pismena () { printf ("O K J A U H R S D Z \n"); } int podminka (int O, int K, int J, int A, int U, int H, int R, int S, int D, int Z) { if (!(O * 10 + K + J * 10 + A == U * 100 + H * 10 + U)) return 0; if (!(100 * A + 10 * K + D + 100 * R + 10 * U + S == 100 * S + 10 * J + K)) return 0; if (!(100 * U + 10 * J + A + 100 * U + 10 * H + Z == 100 * O + 10 * Z + A)) return 0; if (!(100 * S + 10 * A + D + 100 * O + 10 * K + R == 1000 * U + 100 * O + 10 * H + U)) return 0; return 1; } int main () { int N, *pr; N = 10; pr = new int[N]; for (int i = 0; i < N; i++) pr[i] = i + 1; Vypis_pismena (); do { if (podminka (pr[0] - 1, pr[1] - 1, pr[2] - 1, pr[3] - 1, pr[4] - 1, pr[5] - 1, pr[6] - 1, pr[7] - 1, pr[8] - 1, pr[9] - 1)) PrintPermutation (N, pr); } while (NextPermutation (N, pr)); delete[]pr; return 0; } int NextPermutation (int n, int *pr) { int a, b, c, i, ii; for (int l = n - 1; l > 0; l--) { a = pr[l]; b = pr[l - 1]; if (a > b) { i = l + 1; ii = l; while (i < n) { c = pr[i]; if ((c > b) && (c < a)) { a = pr[i]; ii = i; } i++; } pr[l - 1] = a; pr[ii] = b; // prohozeni // tady jeste srovnat if (l < n - 1) { int *sr = new int[n]; for (i = 0; i < n; i++) sr[i] = 0; for (i = l; i < n; i++) sr[pr[i] - 1] = 1; //PrintPermutation(n,sr); ii = l; for (i = 0; i < n; i++) if (sr[i]) pr[ii++] = i + 1; delete[]sr; } return 1; } } return 0; } void PrintPermutation (int n, int *pr) { for (int i = 0; i < n; i++) printf ("%d ", pr[i] - 1); printf ("\n"); }