Что нового

[Все] Тестовый. Бухгалтер Вася.

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
Бухгалтеру Васе Шеф поручил особое задание. Ему предстоит просмотреть всю историю существования их компании и определить единый коэффициент роста дохода за определенные i лет.
Но так как компания существует давно, то Вася решил написать программу, которая подберет данный коэффициент за него.
Есть число Н - это доход по истечении первого года, а О - это доход по окончанию i-ого года.
Н * Xi = O
Однако коэффициент может получиться и отрицательным - если выбранные года были убыточными.
Шеф поставил особую задачу. Что бы красивее представить отчет на собрании, коэффициент должен быть целым числом. (НЕ ОКРУГЛЕН) Число с точкой не принимать как ответ вообще. Т.е. если у Вас таковое получается, то программа должна вывести "None"

Вводимые данные:
Переменные $N $O $i.

Возвращаемые программой значения:
Единственное число - коэффициент. Если вдруг такого коэфециента не существует, то программа должна вывести "None"

Пример:
Код:
$N = 2 
$O = 18 
$i = 2

Возвращаемое значение: 3

Примечания к конкурсу:
[list type=decimal]
[*]Вывод значения производить через ConsoleWrite.
[*]Код прятать под тег спойлера.
[*]Каждый код будет протестирован на одной и той же машине. Он будет помещен в функцию, время исполнения которой будет проверяться на 10-15 значений с таймером.
[*]Если программа вернет неверное значении в каком либо из тестов - Ваше сообщение будет отредактировано и написаны значения для которых происходит ошибка.
[/list]

Выигрывает тот, кто быстрее всех напишет достаточно быстрый алгоритм нахождения коэффициента
 

ggzgamer

Осваивающий
Сообщения
134
Репутация
23
Код:
Func _K($N, $O, $i) ; $H - доход первого года, $O - доход последнего года, $i - число лет
	$x=($O/$N)^(1/$i)
    ConsoleWrite($x & @CRLF)
EndFunc

[box title=Ошибки]
1. Программа не выводит "None" если такого коэффициента не существует
2. Числа с запятой не приемлемы. Только целые числа.[/box]
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Код:
Global $N = 2, $O = 18, $i = 2, $x

$x = ($O / $N) ^ (1 / $i)
If StringInStr($x, '.') Or StringInStr($x, '-') Then Exit ConsoleWrite('none' & @CRLF)
ConsoleWrite($x & @CRLF)

[box title=Ошибка]
Введеннные числа: $N = 0 $O = 0 $i = 10
Exit code = 6[/box]
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Что-то мудрено у вас условия написаны :stars:
Код:
#include <math.au3>
ProcessSetPriority ("AutoIt3.exe", 4)
_KOEF(20, 18, 20)

Func _KOEF($N, $O, $i)
If _MathCheckDiv(($O/$N)^(1/$i), 1)=2 And ($O/$N)^(1/$i)>0 Then 
ConsoleWrite(($O/$N)^(1/$i) & @CRLF)
Else
ConsoleWrite("None")
EndIf
EndFunc
[box title=Ошибка]
Вводимые значения $N= -1 $O = 8 $i = 3
Неверный ответ.[/box]
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Я уже знаю. Вот правильный.
Код:
//// Верный код.
Пока разбирался с условием, уже протестили. :smile:

[box title=Инфо]
Ладно, я засчитаю твой ответ правильным - но только из-за спецефичности решения
По сути если $N = 0 то ответ может быть, а ты это обрезал. Но видно что обрезано только из за этой формулы.
Вобщем ты первый кандидат, и твой ответ я уберу пока =)
Конкурс на этом не оканчивается! Ждем еще варианты!
И еще для всех пользователей!
Не нужно заносить Ваши коды в функции когда выкладываете сюда. Я это сделаю сам, иначе мне сложно заменять все неточности в Ваших кодах.[/box]
 

Nik_rus

Python The Snake.
Сообщения
214
Репутация
62
Код:
$N = 2
$O = 18
$i = 2

If ($N=0) or ($O=0) Then
	ConsoleWrite("0")
Else
	$X = (($O^2)/($N^2))^(1/(2*$i))
	If Int($X) = $X Then
		If $O*$N<0 Then
			If Mod($i,2) = 0 Then
				ConsoleWrite("None")
			Else
				ConsoleWrite(-$X)
			EndIf
		Else
			ConsoleWrite($X)
		EndIf
	Else
		ConsoleWrite("None")
	EndIf
EndIf
 
Верх