Главный вождь племени Абба не умеет считать. В обмен на одну из его земель вождь другого племени предложил ему выбрать одну из трех куч с золотыми монетами. Но вождю племени Абба хочется получить наибольшее количество золотых монет. Помогите вождю сделать правильный выбор!
Код
Скопировать код
#include #include using namespace std; bool CS(string a, string b) < if( a.size() >b.size() ) return 1; if( a.size() == b.size() ) for(int i = 0; i < a.size(); ++i) < if( a[i] >b[i] ) return 1; if( a[i] < b[i] ) return 0; >return 0; > int main() < string a, b, c, d; cin >> a >> b >> c >> d; d = a; if( CS(b, d) ) d = b; if( CS(c, d) ) d = c; cout
nbsp nbsp len(b): return 1 if len(a) == len(b): for i in range(len(a)): if a[i] > b[i]: return 1 if a[i] < b[i]: return 0 return 0 a, b, c = map(str, input().split()) d = a if CS(b, d): d = b if CS(c, d): d = c print(d)
Снова у меня вопрос по задаче из школы программистов — ссылка «Золото племени АББА» В задаче надо сравнить 3 числа и вывести наибольшее. Казалось бы, полная ерунда, пару If-ов понатыкал и вывел наибольшее. Но такая программа почему-то не проходит некоторые тесты. Решение я знаю. Там надо используя счетчики, посчитать самую длинную запись в строке, учитывать пробелы, одинаковые значения и т.д. много чего писать не буду. Интересует, что же там такого не подходит роботу в программе с If-ами?
Вот пример моей попытки (не удивляйтесь, что она странноватая программа, я просто не понимая в чем дело усложнял ее):
var a,b,c:int64; begin assign (input, ‘input.txt’); reset(input); assign (output, ‘output.txt’); rewrite(output); read (a,b,c); if (a<>b)and(b<>c)and(a<>c) then begin if (a>b)and(a>c) then write(a); if (b>a)and(b>c) then write(b); if (c>a)and(c>b) then write(c); end; if (a=b)and(b=c) then write(a); if (a=b)or(a=c)or(b=c) then begin if (a>b) then begin if (a>c)and(b=c) then write(a); end; if (a>c) then begin if (a>b)and(b=c) then write(a); end; if (b>a) then begin if (b=c) then write(b); end; if (b>c) then begin if (b>a)and(a=c) then write(b); if (b=a) then write(b); end; if (c>a) then begin if (c>b)and(a=b) then write(c); end; if (c>b) then begin if (a=c) then write(c); end; end; end.
Ошибка в 9ом тесте:
Тест Результат Время Память 1 Accepted 0,211 948 Кб 2 Accepted 0,185 936 Кб 3 Accepted 0,183 936 Кб 4 Accepted 0,202 936 Кб 5 Accepted 0,172 936 Кб 6 Accepted 0,183 936 Кб 7 Accepted 0,19 936 Кб 8 Accepted 0,177 936 Кб 9 Runtime error 0,183 940 Кб
Последний раз редактировалось Ghost3; 29.10.2012 в 11:50 .
Источник: www.programmersforum.ru
Python — Решение http://acmp.ru/ — Task 7 — Золото племени АББА
Задача 7. Золото племени АББА
Предлагаю на примере этой задачи (с сайта acmp.ru ) на длинную арифметику посмотреть, как знание разных языков программирования помогает проще и быстрее получать заветный Accepted.
Условие задачи с сайта acmp.ru
Эта задача находится в разделе «длинная арифметика», но стоит оговориться, что никаких арифметических операций с длинными числами здесь делать не надо, только операцию сравнения.
Самым простым решение будет на языке Python, потому что в нём длинная арифметика есть «из коробки». И это, к сожалению, убивает всю изначальную соль задачи. Но в очередной раз напомню, что надо осторожно считать асимптотическую сложность своего решения, когда дело доходит до длинных чисел.
Решение на Python
В этом решении всё банально просто: считываем данные, приводим их к целым числам и находим максимум стандартной функцией.
По такой же схеме работает и решение на Java. Только здесь уже нет длинной арифметики «из коробки», а надо использовать специальный тип данных BigInteger , работа с которым не отличается особым удобством и лаконичностью.
Решение на Java
Но больше всего сложностей должно возникнуть у программистов на C++, потому что там даже в STL нет работы с длинными числами. К счастью, в этой задаче нужна только операция сравнения, а числа даны без ведущих нулей. В таком случае удобнее вообще не переводить строки в числа. Тогда можно использовать обычное (лексикографическое) сравнение строк, но прежде убедиться, что количество разрядов в числах одинаковое.