Top.Mail.Ru
Ответы

Помогите с программой!

Я сделал псевдо-рандомный генератор. Вводится число сколько раз в случайном порядке выводится a,b,c, но нужно чтобы два символа не повторялись (abacbba-неправильно)(abacaca-правильно)

По дате
По рейтингу
1234567891011
 //
            Random rnd = new Random(); 
            int r, t = -1; 
            string st = "abc"; 
            for (int i = 0; i < 10; i++) 
            { 
                r = rnd.Next(st.Length); 
                if (r == t) r = (r + 1) % st.Length; 
                t = r; 
                Console.Write(st[r]); 
            } 
Аватар пользователя
Оракул

Возможны входные данные, при которых повторений не избежать.
Например, 1 1 5 породит cacbccc, и это никак не улучшить.

Думаю, можно завести три счетчика, сколько осталось букв a, b, c.
И брать ту букву, у которой счетчик имеет наибольшее значение.
При поиске такой буквы игнорировать счетчик той буквы, которая только что была.

Например, A = 1, B = 2, C = 4.
Счетчик C самый большой, берем букву c.

c

Теперь A = 1, B = 2, C = 3.
Счетчик C самый большой, но буква c только что была, поэтому берем b (так как B > A).

cb

Теперь A = 1, B = 1, C = 3.
Счетчик C самый большой, берем букву c.

cbc

Теперь A = 1, B = 1, C = 2.
Счетчик C игнорируем, остаются на выбор A или B.
Тут не важно, можно рандом.

cbca

Теперь A = 0, B = 1, C = 2.

В дальнейшем получится cbcacbc (или cbcbcac, если рандом сработает иначе).

При этом программа, если возможно, избежит такой ситуации, когда все счетчики по нулям, а в одном 2 или больше: ведь она всегда предпочитает наибольший допустимый счетчик.