702 Stimmen

Teilen Sie eine Zahl durch 3, ohne * , / , + , - , % Operatoren zu verwenden

Wie würden Sie eine Zahl durch 3 teilen, ohne die *, /, +, -, % Operatoren zu verwenden?

Die Zahl kann positiv oder negativ sein.

2 Stimmen

Dies ist schwer, da Sie + oder - nicht verwenden können. Sie könnten technisch gesehen einen Addierer nur unter Verwendung von logischen Operatoren implementieren...

1 Stimmen

Sind Sie zu 100% sicher, dass + in der Liste der nicht verwendbaren Elemente stand?

0 Stimmen

Ist der unäre +, - erlaubt?

0voto

Wenn wir __div__ als nicht orthografisch / betrachten

def divBy3(n):
    return n.__div__(3)

print divBy3(9), 'oder', 9//3

0voto

A B Punkte 1926
#!/bin/ruby

def div_by_3(i)
  i.div 3        # gibt immer eine Zahl zurück  http://www.ruby-doc.org/core-1.9.3/Numeric.html#method-i-div
end

0 Stimmen

Der OP hat nach einer Lösung in C, nicht in Ruby, gefragt.

0 Stimmen

Es gab keine Erwähnung von C in der Frage, nur von Tag. Du bist nicht eingestellt < ;) >

1 Stimmen

Ich bin mir ziemlich sicher, dass du den Ruby-Aufruf als externen Aufruf von C aus mit popen() einbinden kannst.

-1voto

sleeping.ninja Punkte 607

Na ja, du könntest darüber nachdenken, eine Graph-/Baum-Struktur zu verwenden, um das Problem zu lösen. Generiere im Grunde genommen so viele Knoten wie die Zahl, die durch 3 geteilt werden soll. Paare dann jeden nicht gepaarten Knoten mit zwei anderen Knoten.

Ungefährer Pseudocode:

function divide(int num)
    while(num!=0)
        Füge der Knotenliste einen neuen Knoten hinzu.
        num--
    Quotient = 0
    für jeden in der Knotenliste (nennen wir diesen Knoten A)
        if die Knotenliste nicht leer ist
            Füge eine Kante zwischen A und einem anderen Knoten (sagen wir B) hinzu
        else
            Dein Rest ist 1 und der Quotient ist quotient
        if die Knotenliste nicht leer ist
            Füge eine Kante zwischen A und einem anderen Knoten (sagen wir C) hinzu
        else
            Dein Rest ist 2 und der Quotient ist quotient
        Quotient++
        entferne A, B, C aus der Knotenliste
    Rest ist 0 und Quotient ist quotient

Dies kann offensichtlich optimiert werden und die Komplexität hängt davon ab, wie groß deine Zahl ist, aber es sollte funktionieren, vorausgesetzt, du kannst ++ und -- machen. Es ist so gut wie zählen, nur cooler.

-1voto

CPRitter Punkte 151

Dies wird funktionieren:

smegma$ curl http://www.wolframalpha.com/input/?i=14+divided+by+3 2>/dev/null | gawk 'match($0, /link to /input/\?i=([0-9.+-]+)/, ary) { print substr( $0, ary[1, "start"], ary[1, "length"] )}' 4.6666666666666666666666666666666666666666666666666666

Ersetzen Sie einfach '14' und '3' durch Ihre Zahlen.

-1voto

Dave Aaron Smith Punkte 4447

Hier ist es in Python mit, im Wesentlichen, Zeichenvergleichen und einem Zustandsautomaten.

def divide_by_3(input):
  to_do = {}
  enque_index = 0
  zero_to_9 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  leave_over = 0
  for left_over in (0, 1, 2):
    for digit in zero_to_9:
      # left_over, digit => enque, leave_over
      to_do[(left_over, digit)] = (zero_to_9[enque_index], leave_over)
      if leave_over == 0:
        leave_over = 1
      elif leave_over == 1:
        leave_over = 2
      elif leave_over == 2 and enque_index != 9:
        leave_over = 0
        enque_index = (1, 2, 3, 4, 5, 6, 7, 8, 9)[enque_index]
  answer_q = []
  left_over = 0
  digits = list(str(input))
  if digits[0] == "-":
    answer_q.append("-")
  digits = digits[1:]
  for digit in digits:
    enque, left_over = to_do[(left_over, int(digit))]
    if enque or len(answer_q):
      answer_q.append(enque)
  answer = 0
  if len(answer_q):
    answer = int("".join([str(a) for a in answer_q]))
  return answer

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X