Как определить приоритет строки на основе ее ранжирования по взвешенным значениям? - PullRequest
0 голосов
/ 04 января 2019

У меня есть массив строк, где каждая строка в массиве представляет сообщение в заданном формате:

# Priority Place

% будет использоваться в качестве разделителя, показывая нам, где заканчивается название места.

Пример:

1 # Нью-Йорк% 2 # Париж% 3 # Лондон

2 # Tokyo% 1 # Париж

Как видите, приоритет не должен быть восходящим, и места могут встречаться более одного раза с другим приоритетом. Если приоритет равен 1, место будет стоить 1 балл. Приоритет 2 означает, что он стоит 0,6 балла, а приоритет 3 - 0,3 балла.

Таким образом, используя приведенный выше пример, Нью-Йорк будет стоить 1 балл, Париж - 1,6 балла, Лондон - 0,3 балла, а Токио - 0,6 балла.

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

Мне удалось разделить строки с помощью разделителя%, и теперь у меня есть еще один массив строк с местом и приоритетом (Priority # Place) для каждой строки. Используя предыдущий пример, у меня есть:

1 # Нью-Йорк

2 # Париж

3 # London

2 # Tokyo

1 # Париж

Однако, поскольку место встречается не раз, я не уверен, как определить его общую стоимость. Я планировал создать массив, который будет содержать значения для каждой строки (например, Париж - это индекс 1, проверьте первый символ в строке и добавьте 0,6 точки, потому что его приоритет равен 2), но позже у меня возникнет проблема, потому что появляется Париж снова в 4-м индексе, и присвоение значения в 4-м индексе еще один 1 пункт не очень поможет, так как мне нужно было бы назначить его для 1-го индекса.

            temp=strtok(lista[j], "%");
            if(temp!=NULL)
            {
                strcpy(mjesto[kol], temp);
                kol++;
                temp=strtok(NULL, "%");
                if(temp!=NULL)
                {
                    strcpy(mjesto[kol], temp);
                    kol++;
                    temp=strtok(NULL, "%");
                    if(temp!=NULL)
                    {
                        strcpy(mjesto[kol], temp);
                        kol++;
                        temp=strtok(NULL, "%");
                    }
                }
            }

for(j=0; j<kol; j++)
{
    strcpy(tempMjesta[j], mjesto[j]);
}


for(j=0; j<kol; j++)
{
    mjestoKon[j]=strtok(mjesto[j], "#");
    mjestoKon[j]=strtok(NULL, "\0");
}

for(j = 0; j < kol; j++)
{
    for(k = j+1; k < kol; )
    {
        if(strcmp(mjestoKon[k], mjestoKon[j])==0)
        {
            for(g = k; g < kol; g++)
            {
                strcpy(mjestoKon[g], mjestoKon[g+1]);
            }
            kol--;
        }
        else
        {
            k++;
        }
    }
}

for(k=0; k<kol; k++)
            printf(">>> %s \n", mjestoKon[k]);

for(j=0; j<kol; j++)
{
    strcpy(mjesto[j], tempMjesta[j]);
}

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

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