LINUX.ORG.RU

[Java] задачка

 


0

1

написать рекурсивный метод, который отображает ряд символов:

p(1) = (a)
p(2) = ((a(a)a))
p(3) = (((a((a(a)a))a)))
p(4) = ((((a(((a((a(a)a))a)))a))))

доп. метод:

void printChar(char c, int n) {
     for (int i = 0; i < n; i++) {
          System.out.printf("%c", c);
     }
}

помогите осилить.



Последнее исправление: Sonsee (всего исправлений: 2)
// Some bullshit for LOR neosilyators
#include <iostream>

void printChar(char c, int n)
{
  for (int i = 0; i < n; i++)
    std::cout << c;
}

void print(int k)
{
  printChar('(', k);

  if (k == 1)
  {
    printChar('a', 1);
  }
  else
  {
    printChar('a', 1);
    print(k - 1);
    printChar('a', 1);
  }

  printChar(')', k);
}

int main()
{
  int n;
  std::cin >> n;
  print(n);
  printChar('\n', 1);
  return 0;
}
anonymous
()
Ответ на: комментарий от anonymous
// Some bullshit for LOR neosilyators
#include <iostream>

void printChar(char c, int n)
{
  for (int i = 0; i < n; i++)
    std::cout << c;
}

void print(int k)
{
  printChar('(', k);

  if (k == 1)
  {
    printChar('a', 1);
  }
  else
  {
    printChar('a', 1);
    print(k - 1);
    printChar('a', 1);
  }

  printChar(')', k);
}

int main()
{
  int n;
  std::cin >> n;
  print(n);
  printChar('\n', 1);
  return 0;
}
anonymous
()
Ответ на: комментарий от anonymous

блин, а правильно ты думаешь.
я «дано» не осилил, оказывается.. оно ведь и не должно p(количество строк) отображать, а просто одну строку..

думал, что если мы в print 4 посылаем, то оно и 4 строки:

p(1) = (a)
p(2) = ((a(a)a))
p(3) = (((a((a(a)a))a)))
p(4) = ((((a(((a((a(a)a))a)))a))))

должно показать, но в дано это прямо не говорится :) спасибо.

Sonsee
() автор топика
Ответ на: Питон от Donnie_Darko

Еще один неуч - кто тебя просил писать на Питоне? Если не осилил Жабу, то так и скажи, а еще лучше молчи.

-- другой anonymous

anonymous
()
Ответ на: комментарий от anonymous

> Ты читать не умеешь? Написано же _Java_.
Надо быть полным отморозком, чтобы простую функцию с C/C++ не перевести на Java.

-- тот самый anonymous

anonymous
()
Ответ на: комментарий от anonymous

>Еще один неуч - кто тебя просил писать на Питоне?

правильное решение уже дали. теперь можно и пис^W языками померяться

Donnie_Darko
()
Ответ на: комментарий от Sonsee

> всё он умеет, оно так же и в яве будет.

Сколько по вашему изменений надо внесить в приведенный плюсовый код, чтобы он стал жабовым?

anonymous
()
Ответ на: комментарий от anonymous

> Надо быть полным отморозком, чтобы простую функцию с C/C++ не перевести на Java.

А чего же тогда ты сразу на Java не написал? Очевидно потому что ты и есть тот самый полный отморозок.

-- другой anonymous

anonymous
()
Ответ на: комментарий от anonymous

Сколько по вашему изменений надо внесить в приведенный плюсовый код, чтобы он стал жабовым?

задача была написать _рекурсивную функцию_
функция:

oid print(int k)
{
  printChar('(', k);

  if (k == 1)
  {
    printChar('a', 1);
  }
  else
  {
    printChar('a', 1);
    print(k - 1);
    printChar('a', 1);
  }

  printChar(')', k);
}

менять _не надо_. Копи-паст в яву, и она будет работать.

Sonsee
() автор топика
Ответ на: комментарий от elverion

> Язык выбирается под задачу.

Открой глаза умник: ТС уже выбрал язык и указал его в названии темы.

-- другой anonymous

anonymous
()
Ответ на: комментарий от anonymous

> А чего же тогда ты сразу на Java не написал?
Кто отморозок, ты отморок ёпт! У меня JDK не установлен, вот и использую всякие плюсы.

-- тот самый анонимус

anonymous
()
Ответ на: комментарий от Sonsee

> задача была написать _рекурсивную функцию_

Задача была написать _метод_, а функций в Java просто нет - учи матчасть.

anonymous
()
Ответ на: комментарий от Donnie_Darko

>теперь можно и пис^W языками померяться

С нетерпением жду варианта решения задачи на Lisp, Scala, Haskell.

anonymous
()
Ответ на: комментарий от anonymous

> Кто отморозок, ты отморок ёпт!

Ха-ха-ха )))

У меня JDK не установлен, вот и использую всякие плюсы.

Чего в тред тогда лезешь? Или поставить слабо? )))

-- другой anonymous

anonymous
()
Ответ на: комментарий от anonymous

С нетерпением жду варианта решения задачи на Lisp, Scala, Haskell.

Решение на Scheme:

(define (print-char c n)
  (if (> n 0)
      (begin
        (display c)
        (print-char c (- n 1)))))

(define (solve n)
  (print-char "(" n)
  (if (= n 1)
      (print-char "a" 1)
      (begin
        (print-char "a" 1)
        (solve (- n 1))
        (print-char "a" 1)))
  (print-char ")" n))

anonymous
()
Ответ на: комментарий от anonymous

С нетерпением жду варианта решения задачи на Lisp, Scala, Haskell.

Да разве ж нам такого говна жалко? Пожалуйста!

def gen_str(level: Int): String = {
  if (level <= 1) "(a)"
  else "(" * level + "a" + gen_str(level - 1) + "a" + ")" * level
}

-- вообще не анонимус

Zenom ★★★
()
Ответ на: комментарий от anonymous

С нетерпением жду варианта решения задачи на Lisp, Scala, Haskell.

Haskell

p 1 = "(a)"
p n = concat [replicate n '(', "a", p (n-1), "a", replicate n ')']

Вроде компилируется ;)

quasimoto ★★★★
()
Ответ на: комментарий от Donnie_Darko

Ну дык:

$ ghci
GHCi, version 6.12.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> let f 1 = 1
Prelude> let f n = f $ n - 1
Prelude> f 5
^ Хрен...

GHCi не умеет делать паттерн-матчинг на несколько let-ов верхнего уровня - всё стирает, и берёт последнее определение как единственный case.

Можно только так:

Prelude> let p n = case n of 1 -> "(a)"; n -> concat [replicate n '(', "a", p (n-1), "a", replicate n ')']

Либо сохранить в файл и :load. Либо haskell-mode для emacs (что наиболее удобно, ИМХО).

quasimoto ★★★★
()
Ответ на: комментарий от Donnie_Darko

пока что ваш пример на haskell круче всех.

Ну это не показатель :)

/me пошел читать RWH

/me пока застрял на монадических трансформерах. Монады это ведь, вроде, красиво и просто, но когда в реальном коде они начинают смешиваться (вроде IO + Maybe) - получается одна головная боль (и приходится постигать MaybeT).

quasimoto ★★★★
()
Ответ на: комментарий от anonymous
#lang racket

(define (print-char c n)
  (printf (make-string n c)))

(define (print* n a b c)
  (print-char a n)
  (print-char b 1)
  (when (> n 1)
    (print* (- n 1) a b c)
    (print-char b 1))
  (print-char c n))

(define (print n)
  (print* n #\( #\a #\)))
korvin_ ★★★★★
()
* (defun ra (n)
  (cond
    ((< n 1)  (error "n must be 1 or higher"))
    ((= n 1) (format nil "(a)"))
    (t (concatenate 'string
                    (make-string n :initial-element '#\()
                    "a"
                    (funcall #'ra (- n 1))
                    "a"
                    (make-string n :initial-element '#\))))))

RA
* (ra 4)

"((((a(((a((a(a)a))a)))a))))"
* (ra 1)

"(a)"
* (ra 29)

"(((((((((((((((((((((((((((((a((((((((((((((((((((((((((((a(((((((((((((((((((((((((((a((((((((((((((((((((((((((a(((((((((((((((((((((((((a((((((((((((((((((((((((a(((((((((((((((((((((((a((((((((((((((((((((((a(((((((((((((((((((((a((((((((((((((((((((a(((((((((((((((((((a((((((((((((((((((a(((((((((((((((((a((((((((((((((((a(((((((((((((((a((((((((((((((a(((((((((((((a((((((((((((a(((((((((((a((((((((((a(((((((((a((((((((a(((((((a((((((a(((((a((((a(((a((a(a)a))a)))a))))a)))))a))))))a)))))))a))))))))a)))))))))a))))))))))a)))))))))))a))))))))))))a)))))))))))))a))))))))))))))a)))))))))))))))a))))))))))))))))a)))))))))))))))))a))))))))))))))))))a)))))))))))))))))))a))))))))))))))))))))a)))))))))))))))))))))a))))))))))))))))))))))a)))))))))))))))))))))))a))))))))))))))))))))))))a)))))))))))))))))))))))))a))))))))))))))))))))))))))a)))))))))))))))))))))))))))a))))))))))))))))))))))))))))a)))))))))))))))))))))))))))))"
* (ra 0)

debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING
                                               {1002BCAD11}>:
  n must be 1 or higher

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(RA 0)
0] 0

* 
ugoday ★★★★★
()
Ответ на: комментарий от ugoday

имхо, лучше уж так:

(deftype natural ()
  '(integer 1 *))

(defun ra (n)
  (check-type n natural)
  (if (= n 1)
      (format nil "(a)")
      (concatenate 'string
                   (make-string n :initial-element '#\( )
                   "a"
                   (funcall #'ra (- n 1))
                   "a"
                   (make-string n :initial-element '#\) ))))
anonymous
()
Ответ на: комментарий от anonymous

вариант на tcl, нерекурсивно, но забавно

proc ffunc { n } {
	return [ join [ map { x {
		if { !$x } {
			return -code continue
		}
		if {$x >= 0} {
			return [ string repeat "(" $x ]
		} 
		return [ string repeat ")" [ expr -$x ] ]
	}} [ range $n -$n ] ] "a" ]
}
# map,range взять из man`ов или wiki.tcl.tk

MKuznetsov ★★★★★
()

Ну, раз пошла такая пьянка:

$ cat test.fs

: printChar 
	{ c n -- } assert( n 0 > )
	n 0 do c emit loop
;

: print recursive 
	{ n -- } assert( n 0 > )
	[char] ( n printChar
	n 1 = if 
		[char] a 1 printChar
	else 
		[char] a 1 printChar
		n 1- print
		[char] a 1 printChar
	endif 
	[char] ) n printChar
;

CR
1 print CR
2 print CR
3 print CR
4 print CR
29 print CR
CR
BYE


$ gforth test_0003.fs 

(a)
((a(a)a))
(((a((a(a)a))a)))
((((a(((a((a(a)a))a)))a))))
(((((((((((((((((((((((((((((a((((((((((((((((((((((((((((a(((((((((((((((((((((((((((a((((((((((((((((((((((((((a(((((((((((((((((((((((((a((((((((((((((((((((((((a(((((((((((((((((((((((a((((((((((((((((((((((a(((((((((((((((((((((a((((((((((((((((((((a(((((((((((((((((((a((((((((((((((((((a(((((((((((((((((a((((((((((((((((a(((((((((((((((a((((((((((((((a(((((((((((((a((((((((((((a(((((((((((a((((((((((a(((((((((a((((((((a(((((((a((((((a(((((a((((a(((a((a(a)a))a)))a))))a)))))a))))))a)))))))a))))))))a)))))))))a))))))))))a)))))))))))a))))))))))))a)))))))))))))a))))))))))))))a)))))))))))))))a))))))))))))))))a)))))))))))))))))a))))))))))))))))))a)))))))))))))))))))a))))))))))))))))))))a)))))))))))))))))))))a))))))))))))))))))))))a)))))))))))))))))))))))a))))))))))))))))))))))))a)))))))))))))))))))))))))a))))))))))))))))))))))))))a)))))))))))))))))))))))))))a))))))))))))))))))))))))))))a)))))))))))))))))))))))))))))

:-)

Neksys ★★★
()
Ответ на: комментарий от Neksys

кхм, разумеется:

$ cat test_0003.fs
...
$ gforth test_0003.fs 
...
:)

Neksys ★★★
()

perl6

multi sub p(1)  { '(a)' }
multi sub p($n) { ('(' x $n) ~ 'a' ~ p($n-1) ~ 'a' ~ (')' x $n) }
say p 4

;)

arsi ★★★★★
()
Ответ на: комментарий от Donnie_Darko

помехи восприятия

Субъективизм. Посмотри на лисповый код и попробуй доказать лисперам, что он плохо воспринимается. Удачи, хе-хе.

baverman ★★★
()
Ответ на: комментарий от baverman

> Посмотри на лисповый код и попробуй доказать лисперам, что он плохо воспринимается.

а что Вам там непонятно?

korvin_ ★★★★★
()
Ответ на: комментарий от korvin_

непонятно из-за чудовищного отличия от синтакиса языка С — этого образцово-показательного, классического синтаксиса всех времён и народов.

anonymous
()
Ответ на: комментарий от korvin_

а что Вам там непонятно?

Мне то как-раз всё понятно. Я хотел сказать, что сложность восприятия синтаксиса всего лишь дело привычки и не имеет ничего общего со сложностью алгоритма. Если не брать в расчет эзотерики, естественно.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.