Я пытаюсь найти две формулы, которые будут возвращать либо X, либо Y из ввода n. Эти координаты должны быть на спиралевидной сетке, похожей на спираль Улама, но n означает не положение на спирали, а только изменение направления.
n = 1, return 0,1;
n = 2, return 1,1;
n = 3, return 1,-1;
n = 4, return -1,-1;
n = 5, return -1,2;
n = 6, return 2,2;
n = 7, return 2,-2;
n = 8, return -2,-2;
Должны быть две отдельные формулы, просто укажите n и получите X, а другую — для получения Y. Эффективно это только в одной строке для X или Y с n в качестве входной позиции цикла.
Посмотрите на значения X:
0 1 1 -1 -1 2 2 -2 -2 3 3 -3 -3 ...
Выполните очевидную группировку и сравните с n:
n: 1 2 3 4 5 6 7 8 9 10 ...
x: 0 1 1 -1 -1 2 2 -2 -2 3 ...
Добавьте еще одну строку для k = (n+2)/4 (округляя в меньшую сторону, я не знаю, как указать функцию floor
в ascii) и m = n mod 4:
k: 0 1 1 1 1 2 2 2 2 3 ...
m: 1 2 3 0 1 2 3 0 1 2
Этого должно быть достаточно, чтобы показать, как отображать x на любом языке, который вам больше нравится.
И тогда y легко: y(n) = x(n+1)
@ user2280032: Разве это не очевидно? x=k(2*(m/2)-1), где m/2 округляется в меньшую сторону.
Вероятно, так и было бы, если бы уроки математики не состояли только из заучивания вещей наизусть. Во всяком случае, у меня теперь X правильно используется: x=floor((n+2)/4)*(2*floor((n%4)/2)-1) Когда я теперь делаю y=x*(n-1 ) однако я получаю значения, увеличивающиеся на степень 3, я вернулся к испытанию ошибки, не уверен, что не так.
Не могли бы вы просто указать: X= Y= для заданного n?
@user2280032: Как вы сказали, заучивание вещей наизусть никогда не даст вам математических способностей. И вы должны развить некоторые математические способности, иначе ответ будет вам бесполезен. Когда я говорю y(n)=x(n+1)
, я имею в виду, что как только вы узнаете, что такое x при n = 11, вы узнаете, что такое y при n = 10. Итак, если вы хотите узнать y при n=100, посмотрите на x при n=101. Если вам нужна простая формула для y, придумайте ее.
Эту часть я неправильно понял, извините за это. Мне удалось сложить 2 и 2 вместе и получить из этого правильную формулу, спасибо. х = пол((n+2)/4)*(2*этаж((n%4)/2)-1); y = этаж(((n)+3)/4)*(2*этаж(((n+1)%4)/2)-1);
На самом деле мне просто нужна формула, а не конкретный язык.