Простые перестановки без повторения - PullRequest
0 голосов
/ 30 мая 2019

Очень часто, решая заранее подготовленные задачи в Интернете, я оказываюсь в ситуации, когда мне нужно выполнить перестановку в два цикла, но без какого-либо повторения, поскольку часто существует произведение двух чисел, для которых применимы свойства вычисления.Я хотел бы получить самый простой способ сделать это:

for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 2; j++) {
        printf("%d %d\n",i ,j);
    }
}

, который выводит:

0 0,
0 1,
1 0,
1 1,
1 2,
2 0,
2 1,
2 2,

без повторения, так что-то вроде этого:

0 0,
0 1,
1 1,
1 2,
2 0,
2 2.

1 Ответ

0 голосов
/ 30 мая 2019

Учитывая, что i и j увеличены до одинакового максимального числа, вы можете получить следующее:

for (int i = 0; i <= 2; i++) {
    for (int j = 0; j <= 2; j++) {
        if (j >= i) {
            printf("%d %d\n",i ,j);
        }
    }
}

Если j меньше i , это означает, что одно и то же значение i уже напечатано со всеми возможными значениями обеих переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...