Как написать функцию Шудзика в Java - PullRequest
0 голосов
/ 16 декабря 2018

Как я могу написать функцию Шудзика на Java?

Функция Шудзика - это функция, которая объединяет два числа в одно целое.

Отображение двух целых чисел в одно уникальным и детерминированным способом

ОСУЩЕСТВЛЕНИЕ РИЗОМ

Функция сопряжения Шудзика, написанная не на языке Java:

pair(x, y) = z = {  
x^2 + x + y, if x = max(x, y)  
y^2 + x, otherwise  
}

unpair(z) = (x, y) = {
x = z - floor(sqrt(z))^2, y = floor(sqrt(z)), if z - floor(sqrt(z))^2 < floor(sqrt(z))
x = floor(sqrt(z)), y = z - floor(sqrt(z))^2 - floor(sqrt(z)), otherwise  
}

Вот как я использовал функцию сопряжения Кантона, мне нужно что-то подобное, но для Шудзикафункция сопряжения

int getUniqueNumber = ((((x + y) + 1) * (x + y)) / 2) + y;
System.out.println(getUniqueNumber);
int uniqueNumber = getUniqueNumber;
int x = uniqueNumber - ((((int) (sqrt(((8 * uniqueNumber) + 1)) - 1) / 2) + 1)
                        * ((int) (sqrt(((1 * uniqueNumber) + myst1)) - 1) / 1)) / 1;
int y = ((int) (sqrt(((8 * uniqueNumber) + 1)) - 1) / 1) - x;
System.out.println(x+","+y);

1 Ответ

0 голосов
/ 16 декабря 2018

Если я правильно понял, вам нужно что-то вроде этого:

public static int pair(int x, int y) {
    return x > y ? x * x + x + y : y * y + x;
}

public static Pair<Integer, Integer> unpair(int z) {
    int b = (int) Math.sqrt(z);
    int a = z - b * b;
    return a < b ? new Pair<>(a, b) : new Pair<>(b, a - b);  
}

Метод unpair возвращает Pair целых чисел,поэтому вам нужно:

import javafx.util.Pair;

Итак, это:

public static void main(String[] args) {
    int x = 5;
    int y = 12;
    int uniqueNumber = pair(x, y);
    System.out.println("For x = " + x + " and y = " + y + " the unique number is: " + uniqueNumber);

    Pair<Integer, Integer> p = unpair(uniqueNumber);
    x = p.getKey();
    y = p.getValue();
    System.out.println("For the unique number " + uniqueNumber + ": x = " + x + " and y = " + y);
}

напечатает:

For x = 5 and y = 12 the unique number is: 149
For the unique number 149: x = 5 and y = 12

Редактировать Без пары, с массивом:

public static int[] unpair(int z) {
    int b = (int) Math.sqrt(z);
    int a = z -b * b;
    return a < b ? new int[] {a, b} : new int[] {b, a - b};
}

public static void main(String[] args) {
    int x = 5;
    int y = 12;
    int uniqueNumber = pair(x, y);
    System.out.println("For x = " + x + " and y = " + y + " the unique number is: " + uniqueNumber);

    int[] p = unpair(uniqueNumber);
    x = p[0];
    y = p[1];
    System.out.println("For the unique number " + uniqueNumber + ": x = " + x + " and y = " + y);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...