Помогите с программой!
Я сделал псевдо-рандомный генератор. Вводится число сколько раз в случайном порядке выводится a,b,c, но нужно чтобы два символа не повторялись (abacbba-неправильно)(abacaca-правильно)
//
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 или больше: ведь она всегда предпочитает наибольший допустимый счетчик.