1

Генерация трехзначных чисел:

char symb [] = { '1','2','3' }; 
for (int i = 0; true; i++)
{
    for (int j = 0; j < 3 ; j++)
    {
      cout << symb[rand() % 3];       
    }       
    cout << endl;
}

Как сделать так что бы эти числа не повторялись? Что бы каждый раз выводилось новое число, пока не закончатся все возможные комбинации.

homer
  • 33
  • 2
    тут есть примерно то, что тебе нужно https://en.cppreference.com/w/cpp/algorithm/random_shuffle – xmikex Oct 23 '21 at 17:43
  • Трёхзначные числа, состоящие только из указанных цифр? Их немного ,всего 27 – MBo Oct 23 '21 at 18:19
  • ну это же к примеру – homer Oct 23 '21 at 18:21
  • ОК, про шаффл хороший совет дали. – MBo Oct 23 '21 at 18:40

3 Answers3

2

https://ideone.com/Bh1nUH

#include <iostream>
#include <cstdlib>

using namespace std;

int main() { char chs[] = "123"; constexpr unsigned n = sizeof chs - 1; bool used[n][n][n] = {}; constexpr unsigned nnn = sizeof used;

printf("%u %u\n", n, nnn);

for (int q = 0, i; q < nnn; ++q) { while (used[0][0][i = rand() % nnn]); used[0][0][i] = true; printf("%c%c%c\n", chs[i/n/n%n], chs[i/n%n], chs[i%n]); }

return 0; }

Qwertiy
  • 123,725
  • @wololo 1. Исправляется заменой на n*n*n. 2. Ну это странно... Везде так делают, я даже в старой книге читал, что так можно :) – Qwertiy Oct 23 '21 at 20:02