Member 13565402 Ответов: 1

Как я могу сделать дерево Калкина-уилфа положительных рациональных чисел в java?


Я хочу перечислить рациональные числа от 1 до входных данных.
Последовательность должна выглядеть так:
не плохой:
1/1,1/2,2/1,1/3,3/2,2/3,3/1,1/4,4/3,3/5,5/2,2/5,5/3,3/4,4/1,1/5, · · ·
Ввод:
10
Выход:
1-->1/1
2-->1/2
3-->2/1
4-->1/3
5-->3/2
6-->2/3
7-->3/1
8-->1/4
9-->4/3
10-->3/5
Я пытался почти 7 дней, но не преуспел

Что я уже пробовал:

public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int k=1;
int j=2;
int temp=2, temp1=1, temp2=2;
System.out.print("Enter Domain(1-N):")
int n=sc.nextInt();
for(int i=1; i<=n; i++)
{
					//Nominator Logic
					if(i==1)
					{
						System.out.println(i+" ----> "+1);
					}
					else
					{
						System.out.println(i+" ----> "+j);
						if(j>1)
						{
							j--;
						}
						else
						{
							j=temp+1;
							temp=temp+1;
						}
					}
					//end Nominator Logic
					
					//Denominator Logic
					if(i==1)
					{
						System.out.println(i+" ----> "+1);
					}
					else if(i<19 && i!=5 && i!=11)
					{
						System.out.println(i+" ----> "+temp1);
						temp1=temp1+1;
						temp2=temp1-1;
					}
					else if(i==5 || i==11)
					{
						temp1=temp1-temp2;
						System.out.println(i+" ----> "+temp1);
					}
					
					
				}
				
}
}

Patrice T

Показать пример ввода, фактический вывод и ожидаемый вывод.

Richard MacCutchan

Забудьте о написании кода и сначала определите алгоритм, который вы пытаетесь использовать. Какова последовательность числителей и знаменателей?

Kornfeld Eliyahu Peter

https://en.wikipedia.org/wiki/Calkin%E2%80%93Wilf_tree

1 Ответов

Рейтинг:
1

Patrice T

Насколько я вижу, ваш алгоритм просто ошибочен, и только полная переписка может решить вашу проблему, нет никакого маленького исправления, чтобы заставить его работать.
Сначала изучите дерево, как оно строится: Калкин–Уилф три - Википедия[^]
Значение узла зависит только от родительских режимов до самого корня, оно не зависит от узлов слева или справа.
Таким образом, ваша задача состоит в том, чтобы найти положение узла в дереве из его номера позиции. Затем найдите путь к корню, из пути вы выведете его значение.
Советы только потому, что мы не делаем вашу домашнюю работу.
-----
Совет: Научитесь правильно делать отступы в вашем коде, это покажет его структуру и поможет чтению и пониманию. Это также помогает выявлять структурные ошибки.
Можно видеть, что в конце кода есть дополнительный символ"}".

public static void main(String[] args){
  Scanner sc=new Scanner(System.in);
  int k=1;
  int j=2;
  int temp=2, temp1=1, temp2=2;
  System.out.print("Enter Domain(1-N):")
  int n=sc.nextInt();
  for(int i=1; i<=n; i++)
  {
    //Nominator Logic
    if(i==1)
    {
      System.out.println(i+" ----> "+1);
    }
    else
    {
      System.out.println(i+" ----> "+j);
      if(j>1)
      {
        j--;
      }
      else
      {
        j=temp+1;
        temp=temp+1;
      }
    }
    //end Nominator Logic

    //Denominator Logic
    if(i==1)
    {
      System.out.println(i+" ----> "+1);
    }
    else if(i<19 && i!=5 && i!=11)
    {
      System.out.println(i+" ----> "+temp1);
      temp1=temp1+1;
      temp2=temp1-1;
    }
    else if(i==5 || i==11)
    {
      temp1=temp1-temp2;
      System.out.println(i+" ----> "+temp1);
    }
  }
}
} // extra } here

Профессиональные редакторы программистов имеют эту функцию и другие, такие как сопоставление скобок и подсветка синтаксиса.
Блокнот++ Главная Страница[^]
личные[^]