Не знаю, правильно ли в заголовке описал суть вопроса, но дело вот в чем:
Имеются, значит, числа k и n:
k∈N n∈N 0<n<k
Нужно найти такую функцию f(x), при которой бы происходило что-то типа этого:
Берем например k = 100, а n = 3. Тогда x∈[0,100].
На диапазоне [0, 33) функция должна возвращать 0,
На диапазоне [34, 66) функция должна возвращать 1,
На диапазоне [67, 100] функция должна возвращать 2.
Да не, в принципе оно для того и надо, и в крайнем случае можно и if использовать. Просто было интересно, возможно ли такое сделать какой-нибудь простой функцией
Одновременно не хочется и какую-то конструкцию с if использовать для такой простой операции, и сложное выражение. Хотя в данный момент все равно использую жуть:
[x*n*(1/k)*0.99]
Квадратные скобки означают, что берется целая часть от того, что внутри.
Вообще-то, приведенная формула не соответствует заданию. По заданию при n=3, k=100 получаются следующие интервалы [0, 33), [34, 50), [50, 100], а по формуле - [0, 33), [34, 66), [67, 100]
Ну, я так и подумал, что ошибка в задании :) Но отфонарный коэффициент 0.99 в формуле не играет. Проверьте на n=3, k=1000, x=334 должен относиться к интервалу 1, а из-за такого коэффициента относится к 0
Вообще, ясно, что этим коэффициентом вы решаете проблему x == n. Во всех случаях, когда граница оказывается целым числом, ее нужно отнести к следующему интервалу, а в этом случае - к предыдущему (например, при n=4, k=100 формула [x*n/k] будет задавать границы 0, 25, 50, 75, 100. Каждая граница, кроме 100 относится к тому интервалу, который в ней начинается, а 100 относится к интервалу, который в ней заканчивается. Вот это граничное условие хорошо решить с помощью if: если x == k, то номер интервала = n - 1, иначе вычислять по формуле безо всяких коэффициентов