Нашёл хороший ресурс с задачами повышенной сложности, сказал бы даже, что это задания приближены к олимпиадным. Задания по началу кажется однообразными, но постепенно они перерастают в нечто большее. Вот парочка задач. (можете выкладывать Ваши ответы на форум для проверки, или зарегистрируйтесь на сайте).
Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел - 23.
Найдите сумму всех чисел меньше 1000 кратных 3 или 5.
Каждые следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 1 и 2, первые 10 элементов будут:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Найдите сумму всех чётных элементов ряда Фибоначчи, которые не превышают четыре миллиона.
Простые делители числа 13195 - это 5, 7, 13 и 29.
Какой самый большой делитель числа 600851475143, являющийся простым числом?
The next statement is not true. The previous statement is true.
Frozzy6, возможно)) я уже забыл как я их решал... Сайт сам интересный, достаточно много задач помогающих человеку "красиво и правильно" программировать =D
begin sum:=0; for i := 1 to MAX-1 do if (i mod 3 = 0)or(i mod 5 = 0) then sum:= sum+i; WriteLn('SUM= '+IntToStr(sum)); Readln; end.
Решение для второго задания:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
const MAX = 4000000;
var i,value:integer; _arr:Array[1..10000] of integer; sum:LongInt;
begin sum:=0; i:=3; _arr[1]:=1; _arr[2]:=2; while (_arr[i-1]+_arr[i-2]) < max do begin _arr[i]:=_arr[i-1]+_arr[i-2]; Writeln(IntToStr(_arr[i])); Inc(i); end; Writeln('---'); value:=i; for i := 1 to value do if i mod 2 = 0 then sum:=sum+_arr[i]; Writeln(IntToStr(sum)); Readln; end.
Решение для третьего задания:
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;
var MAX: UInt64 = 600851475143 ;
function IsSimpy(a:UInt64):Boolean; var i: UInt64; begin Result := True; if (a = 2) then exit; i:= 2; while i<>a-1 do begin if a mod i = 0 then Begin Writeln('Number '+IntToStr(a)+' is not simply'); Result:= False; Break; End; i:=i+1; end; end;
var i:UInt64; answer:UInt64;
begin i:=2; answer:=0; while i<>MAX do begin if max mod i = 0 then if IsSimpy(i) then answer:=i; i:=i+1; end; Writeln(FloatToStr(answer)); Readln; end.
Решения 2й задачи будет производится около часа на среднем компьютере, для лучшей производительности желательно вначале надо было разработать таблицу значений.
Ого... у меня компьютер хоть и быстрый, но я решал так что у меня меньше чем за секунды 2-3 выдавался ответ... Вообще там писали, что если Ваша программа работает более 1 минуты, то вам следует найти другое решение этой проблемы Проверяли на сайте ответы? Сошлось?