Top.Mail.Ru
Ответы
Аватар пользователя
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Помогите решить задачу, C++.

Максимальная из трёх
Даны три строки. Выведите лексикографически максимальную из них.

Входные данные

Даны три строки, состоящие из символов с ASСII-кодами от 32
до 126
. Длина каждой строки не превосходит 100
символов.

Выходные данные

Выведите лексикографически максимальную строку.

Примеры
Ввод
MISIS
MIPT
HSE
Вывод
MISIS

Я написал вот такой код, но тестирующая система говорит что программа выдает неверный ответ. Я выяснил, что если программе дать на вход строку с символами, то символы она считывать не будет.

12345678910111213141516171819202122232425262728293031
 #include <iostream> 
#include <string> 
using namespace std; 
 
int main() { 
    string c1, c2, c3; 
    getline(cin, c1); 
    getline(cin, c2); 
    getline(cin, c3); 
    if(c1>c2) 
    { 
        if(c1>c3) 
        { 
            cout << c1; 
        } 
    } 
    if(c2>c1) 
    { 
        if(c2>c3) 
        { 
            cout << c2; 
        } 
    } 
    if(c3>c2) 
    { 
        if(c3>c1) 
        { 
            cout << c3; 
        } 
    }  
}  


Это сириус курсы, может кто нибудь делал такую задачу.

По дате
По рейтингу
Аватар пользователя
Новичок

Что же выведет ваша программа, если две наибольшие или три строки будут одинаковые? )

Аватар пользователя
Высший разум
12345678910111213
 #include <cstring> 
#include <iostream> 
using namespace std; 
int main() { 
    constexpr size_t n = 101; 
    char a[n]{}, b[n]{}, c[n]{}; 
    cin.getline(a, n); 
    cin.getline(b, n); 
    cin.getline(c, n); 
    strncmp(a, b, sizeof(a)) > 0 
        ? puts(strncmp(a, c, sizeof(a)) > 0 ? a : c) 
        : puts(strncmp(b, c, sizeof(b)) > 0 ? b : c); 
} 
Аватар пользователя
Мудрец

В вашем коде есть проблема в логике сравнения строк. Вы проверяете каждую пару условий отдельно, но не учитываете случай, когда одна из строк может быть максимальной по отношению к двум другим. Вам нужно использовать `else` для корректной обработки всех возможных случаев. К тому же, ваш код не обрабатывает ситуацию, когда одна из строк максимальна, но не попадает в первое условие из-за порядка сравнения.

Попробуйте использовать следующий подход:

1. Сравните первую строку со второй и третьей. Если она больше обеих, то это ваш ответ.
2. Если первая строка не является максимальной, сравните вторую строку с третьей.
3. Выведите ту строку, которая оказалась максимальной после сравнений.

Приведу исправленный код:

```cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
string c1, c2, c3;
// Считываем три строки
getline(cin, c1);
getline(cin, c2);
getline(cin, c3);

// Сравниваем строки и определяем максимальную
string maxString = c1; // Предполагаем, что c1 - максимальная
if (c2 > maxString) {
maxString = c2; // Если c2 больше, то она становится максимальной
}
if (c3 > maxString) {
maxString = c3; // Если c3 больше, то она становится максимальной
}

// Выводим максимальную строку
cout << maxString;
}
```

Этот код корректно считывает строки и определяет максимальную из них в лексикографическом порядке. Ваша ошибка была связана с логикой сравнения строк: необходимо было использовать `else` или корректно обработать все возможные случаи сравнения для определения максимальной строки.

Аватар пользователя
Знаток
6мес

Ответы на Сириус курсы ищи в тг канале "Сириус курсы ответы"