Форум программистов, компьютерный форум CyberForum.ru

Золото племени АББА - C++

Восстановить пароль Регистрация
 
roman0412
1 / 1 / 0
Регистрация: 02.12.2013
Сообщений: 21
22.01.2016, 18:40     Золото племени АББА #1
Добрый день!
Я пытался решить довольно-таки простенькую задачку "Золото племени АББА".
Проблема в том, что мой алгоритм не может хранить очень большие числа, поэтому на Тесте № 3 программа выводит некорректный результат.
Текст задачи:

Кликните здесь для просмотра всего текста
Главный вождь племени Абба не умеет считать. В обмен на одну из его земель вождь другого племени предложил ему выбрать одну из трех куч с золотыми монетами. Но вождю племени Абба хочется получить наибольшее количество золотых монет. Помогите вождю сделать правильный выбор!


№ INPUT.TXT OUTPUT.TXT
1 5 7 3 7
2 987531 234 86364 987531
3 189285 283 4958439238923098349024 4958439238923098349024

Мой код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;
int main() {
    unsigned int Input[3];
    ifstream fin("INPUT.TXT");
    if (fin) {
        for (int i = 0; i < 3; ++i)
            fin >> Input[i];
    }
    else
        cout << "ERROR OPENING FILE";
    unsigned int Result;
    Result = 0;
    for (int i = 0; i < 3; ++i)
        if (Result < Input[i])
            Result = Input[i];
    ofstream fout{ "OUTPUT.TXT" };
    fout << Result;
    system("pause");
    return 0;
 
}
Вы не знаете как это исправить? Заранее благодарен за ответ.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GbaLog-
Не Эксперт C++
1473 / 618 / 174
Регистрация: 24.08.2014
Сообщений: 2,522
Записей в блоге: 1
Завершенные тесты: 2
22.01.2016, 18:43     Золото племени АББА #2
roman0412,
C++
1
unsigned long long int Result = 0;
roman0412
1 / 1 / 0
Регистрация: 02.12.2013
Сообщений: 21
22.01.2016, 19:04  [ТС]     Золото племени АББА #3
Цитата Сообщение от makfak Посмотреть сообщение
unsigned long long int Result = 0;
Спасибо. Я попробовал, но, к сожалению, число 4958439238923098349024 всё равно обрабатывается с ошибкой.
Какие внес правки:
unsigned long long int Input[3];
unsigned long long int Result;
Выводится:
14757395258967641292
GbaLog-
Не Эксперт C++
1473 / 618 / 174
Регистрация: 24.08.2014
Сообщений: 2,522
Записей в блоге: 1
Завершенные тесты: 2
22.01.2016, 19:08     Золото племени АББА #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
roman0412, Тогда попробуйте со строками что ли. Им неважно сколько цифр.
roman0412
1 / 1 / 0
Регистрация: 02.12.2013
Сообщений: 21
22.01.2016, 19:13  [ТС]     Золото племени АББА #5
Цитата Сообщение от makfak Посмотреть сообщение
roman0412, Тогда попробуйте со строками что ли. Им неважно сколько цифр.
Дело в том, что я должен сравнить введенные числа и вывести наибольшее.
Если тип переменной char/string это вряд ли возможно.
Ferrari F1
Заблокирован
295 / 281 / 62
Регистрация: 27.01.2015
Сообщений: 1,893
Записей в блоге: 1
Завершенные тесты: 1
22.01.2016, 19:19     Золото племени АББА #6
roman0412, тогда пиши свой класс сверхбольших чисел, если умеешь
Dimension
Dimension
547 / 428 / 132
Регистрация: 08.04.2014
Сообщений: 1,693
Завершенные тесты: 1
22.01.2016, 19:24     Золото племени АББА #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
считываете в string ,если длины разные у всех то берете с наибольшей длиной ,если есть одинаковые длины то ищите максимальное по значению из них
GbaLog-
Не Эксперт C++
1473 / 618 / 174
Регистрация: 24.08.2014
Сообщений: 2,522
Записей в блоге: 1
Завершенные тесты: 2
22.01.2016, 19:30     Золото племени АББА #8
roman0412, А по-моему всё прекрасно сравнивается.
Как думаешь, каким будет результат этой программы?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string str = "11154646464646";
    string str2 = "11154646464645";
    if( str < str2 ) cout << "asdd";
    if( str2 < str ) cout << "qweq";
    cin.get();
    return 0;
}
kuza84
-4 / 23 / 4
Регистрация: 25.04.2013
Сообщений: 195
22.01.2016, 20:19     Золото племени АББА #9
для решения больших чисел DCB числа подходят же тут только упакованные или не упакованные DBC числа использовать, 1 байт 1 число или 2.

Добавлено через 2 минуты
А если int в 64 бита число влезет с лонгами логнами, считали?
Ferrari F1
Заблокирован
295 / 281 / 62
Регистрация: 27.01.2015
Сообщений: 1,893
Записей в блоге: 1
Завершенные тесты: 1
22.01.2016, 21:16     Золото племени АББА #10
Не знаю, получится ли, но можно попробовать с числами long double поработать.
Liorik
1 / 1 / 1
Регистрация: 22.01.2016
Сообщений: 6
22.01.2016, 21:43     Золото племени АББА #11
для хранения чисел за пределами переменных лучше всего использовать массивы, советую почитать про длинную арифметику.
Dmitriy_73
22.01.2016, 22:07
  #12

Не по теме:

makfak, а этой?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string str = "11154646464646";
    string str2 = "2";
    if( str < str2 ) cout << "asdd";
    if( str2 < str ) cout << "qweq";
    cin.get();
    return 0;
}

GbaLog-
Не Эксперт C++
1473 / 618 / 174
Регистрация: 24.08.2014
Сообщений: 2,522
Записей в блоге: 1
Завершенные тесты: 2
23.01.2016, 12:10     Золото племени АББА #13
Dmitriy_73, Ну ладно, можно свою функцию написать, это не сложно, или сделать, как предложил Dimension.
Sergio Leone
2446 / 1091 / 398
Регистрация: 07.06.2014
Сообщений: 3,243
23.01.2016, 12:17     Золото племени АББА #14
Горячие финские парни, не спорьте.
Зачем привлекать длинную арифметику там, где без неё проще?!
Совет от Dimension однозначно в тему! Сравнили длины строк, какая длинее - там число и больше, если длины строк одинаковы, просто сравнили строки. и всё. пара if-ов и задача решена!
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,640
Записей в блоге: 1
23.01.2016, 13:00     Золото племени АББА #15
Для строк лидирующие нули надо не забыть обрезать.
Dimension
Dimension
547 / 428 / 132
Регистрация: 08.04.2014
Сообщений: 1,693
Завершенные тесты: 1
23.01.2016, 13:44     Золото племени АББА #16
zer0mail, думаю у натуральных чисел не может быть нулей лидирующих
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,640
Записей в блоге: 1
23.01.2016, 15:38     Золото племени АББА #17
Цитата Сообщение от Dimension Посмотреть сообщение
zer0mail, думаю у натуральных чисел не может быть нулей лидирующих
В тестах вполне могут быть и, насколько я помню, есть.
Sergio Leone
2446 / 1091 / 398
Регистрация: 07.06.2014
Сообщений: 3,243
23.01.2016, 23:55     Золото племени АББА #18
Цитата Сообщение от zer0mail Посмотреть сообщение
В тестах вполне могут быть и, насколько я помню, есть.
ты заблуждаешься.
Если речь идёт про задачу "Золото племени АББА" на acmp, то там никаких ведущих нулей нет.
Это я тебе точно говорю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2016, 13:49     Золото племени АББА
Еще ссылки по теме:

Задача Золото племени АББА C++
Взлом игры Warspear Online на золото
Pascal Оптимизация программы "Золото племени АББА"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zer0mail
2185 / 1868 / 187
Регистрация: 03.07.2012
Сообщений: 6,640
Записей в блоге: 1
24.01.2016, 13:49     Золото племени АББА #19
Согласен, память меня подвела. Но помню, что в какой-то подобной задаче тесты не проходили, пока не обрезал ведущие нули. Поэтому этот финт и запомнился.
Yandex
Объявления
24.01.2016, 13:49     Золото племени АББА
Ответ Создать тему
Опции темы

Текущее время: 12:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru