Mitrank Modi Ответов: 4

Проблема лотереи символов - как мне написать эту программу


A lottery system follows a rather unique way of picking the winning "string", i.e. not just the typical winning numbers but a series of characters and some numbers as well. The system pics one character randomly from a bowl at a time and then lays out the character picked out in a line along with the prior ones picked so far. The system then notes down the first non-repeating character in the list. If the non-repeating character does not exist, then it is assumed to be -1. This process is continued until all the N characters are picked. The winning "string" is the set of characters that is written out (including -1) at the end of the process separated by the spaces.

Пример № 1
Ввод
5
w w a c a

Выход
w -1 a a c

Есть 5 символов, которые нужно выбрать в следующем порядке:
Первый выбор: [w], 1-й неповторяющийся элемент-w, выведите "w".
Второй выбор: [w, w], никаких неповторяющихся элементов, выведите "-1".
Третье место: [Ж, Ш, А], 1-й неповторяющийся характер, принт "а".
Четвертое место: [Ж, Ш, А, Ц], 1-й неповторяющийся характер, принт "а".
Пятое место: [Ж, Ш, А, С, а], 1-й неповторяющийся характер, принт "с".
Следовательно, выигрышная строка-это "w -1 a a c".

Пример № 2
Ввод
6
a b c b a d

Выход
a a a a c c

Есть 6 символов, которые нужно выбрать в указанном порядке, после каждого выбора результат выглядит следующим образом:
Первый выбор: [а], 1-й неповторяющегося элемента, принт "а".
Второй выбор: [a, b], 1-й неповторяющийся элемент-это a, выведите "a".
Третий выбор: [a, b, c], 1-й неповторяющийся символ-это a, выведите "a".
Четвертый выбор: [a, b, c, b], 1-й неповторяющийся символ-это a, выведите "a".
Пятый выбор: [a, b, c, b, a], 1-й неповторяющийся символ-c, выведите "c".
Шестой выбор: [a, b, c, b, a, d], 1-й неповторяющийся символ-c, выведите "c".
Следовательно, выигрышная строка - "a a a a c c".

Что я уже пробовал:

#include <stdio.h>

int main()
{
    int n, i;

    printf("Enter number of elements:");
    scanf("%d", &n);

    char a[n];

    printf("Enter elements:");
    for(i=0; i<n; i++)
    {
        scanf("\n%c", &a[i]);
    }
    
    result(a);
}

void result(int a[])
{
    //kindly help with the logic
}

4 Ответов

Рейтинг:
0

OriginalGriff

Прочтите инструкцию и попробуйте сделать это вручную на бумаге.
Когда он будет работать на бумаге, сделайте это снова, на этот раз записывая, как вы это делаете и какие данные вы обрабатываете с каждой инструкцией.
Теперь сделайте это снова, слепо следуя вашим собственным инструкциям. Если они работают, прекрасно. Если они этого не делают, вернитесь к предыдущим этапам и делайте их снова, пока они не сделают.

Теперь у вас есть инструкции,необходимые для начала кодирования, и это самый простой бит!

Да,мы могли бы сделать это для вас, но, во - первых, вы не научитесь этому, а во-вторых, это часть вашей задачи-обучать вас как чтобы сделать эту часть развития.

Удачи вам!


Рейтинг:
0

CPallini

Наивный алгоритм: задана последовательность (или подпоследовательность), имеющая k буквы.
Сначала вы считаете, что первая буква имеет "кандидата": если вы найдете такую букву только один раз в последовательности, то кандидат является результат. С другой стороны, если вы найдете его более одного раза в последовательности, то вам следует рассмотреть следующего кандидата (вторую букву) и так далее.
Этот алгоритм очень прост и, возможно, неэффективен. Может быть отправной точкой,


Рейтинг:
0

KarstenK

вам нужно изменить свой код на следующий, потому что сейчас он не будет компилироваться:

char *a = malloc( n * sizeof(char) );
//when done
free( a );
Разработайте для вашего решения несколько вариантов использования и реализуйте их в различных функциях.


Рейтинг:
0

Mitrank Modi

#arr = ['a', 'b', 'c', 'b', 'a', 'd']
arr = ['w', 'w', 'a', 'c', 'a']
temp = []
result = []
flag = False

for i in range(len(arr)):
    temp.append(arr[i])
    for j in range(len(temp)):
        for k in range(len(temp)):
            if j != k :
                if arr[j] == arr[k]:
                    flag = False
                    break
                else:
                    flag = True
                    continue
            else:
                flag = True
        if flag:
            result.append(arr[j])
            break
        elif j == (len(temp)-1):
            result.append("-1")
            
print(result)


CPallini

Какая странная программа на букву "С"! :-)