Софтуерно Инженерство
Loading...
+ Нов въпрос
dimgog avatar dimgog 2 Точки

Надвишено "Лимит време" за обработка на програмка за изчисляване на факториел

Две програмки:

Първата http://pastebin.com/veeA4XYR

И ВТОРАТА http://pastebin.com/fBs03Qdp

Разликата е само в условието за напускане на цикъла (но и двете работят). Първата има време 0.015 s, а втората има време от 0.156 s и надвишава "Лимит времето" от 0.1 s при първия от седемте теста и дава оценка 85/100 вместо 100/100.

Въпросът е: Каква е причината за това забавяне?

0
Основи на програмирането 08/01/2017 13:54:43
ThePSXHive avatar ThePSXHive 436 Точки

Първият тест явно е единица (за входните данни), а забавянето се дължи на безкрайното "зацикляне" в условието на втория цикъл; понеже do-while конструкцията се изпълнява поне един път, стойността се декрементира до 0, и изпълнението на този блок никога не завършва, защото на n никога не се присвоява стойност единица. За сметка на това, първата версия не изчислява правилно стойността на факториел от 0, която не е 0, а единица. Но все пак, не знам какво е условието, и е възможно нулата да не в интервалът с позволени стойности.

0
07/01/2017 16:44:21
AlucardDracula avatar AlucardDracula 370 Точки
int a = int.Parse(Console.ReadLine());
int b = 1;
for (int i = 1; i <= a; i++)
{
   b = b * i;
   Console.WriteLine(b);
}

отнася се за тая затача ТУК.

според мен грешката ти е в while (n !=1); т.е ако n == 0 ще работи до безкрайност щото int приема и отрицателни числа и когато се препълни започва отново.. и отново 

бележка: пробвай да стартираш кода си с input 0 ще видиш че има грешка

0
07/01/2017 20:35:38
Shirdor avatar Shirdor 130 Точки

overtime се получава в много от случаите на безкраен цикъл, провери дали няма такъв случай

 

0
Sim0o0na avatar Sim0o0na SoftUni Team Moderator Trainer 546 Точки

Използвай pastebin другия път, за да не става поста ти ненужно дълъг :)

0
davichonov365 avatar davichonov365 127 Точки

Според мен последния тест ти препълва и ти дава Exception

1