Überprüfung merkwürdiger Zahlen Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Überprüfung merkwürdiger Zahlen Problem

    Ich bin gerade dabei Programmieren zur lernen, bin in C++ jetz ein stück über Felder, Prototyping, Arrays usw. hinaus, eine "schwere" Aufgabe, zur Prüfung dieser Themen soll ein Programm zur überprüfung ob eine Zahl abdundant, Pseudovollkommen, oder Merkwürdig ist sein. Ich bekomme hier aber nichts laufendes Zustande :( Wäre nett wenn mir jemand helfen könnte.

    Ich habe im Netz einen Quellcode hierzu in einer andren Spreache gefunden:

    #!/usr/bin/ruby

    # Break early version, checking if a number is weird
    def weird_number(n)
    sum = 0
    subset_sums = Hash.new
    subset_sums[0] = true
    for d in 1...n
    next unless n % d == 0
    # Calculate sum of all divisors
    sum += d
    # Calculate sums for all subsets
    subset_sums.keys.each do | s |
    return false if s + d == n
    subset_sums[s + d] = true
    end
    end
    sum > n
    end

    def weird_numbers(range)
    range.select { | n | weird_number(n) }
    end

    # Argument parsing
    raise "Input exactly one number" unless ARGV.length == 1

    max = ARGV[0].to_i

    # Call it
    puts weird_numbers(1..max)

    Würde mir denke ich zum Verständniss sogar schon reicehn wenn mir den jmd. in D++ übersetzen könnte.

    PS: Werr etwas mehr Zeit hat mir das zu erklären könnte sich über ICQ 452810 melden. danke. <-wäre mir lieber

    mfG
  • tach,

    diese aufgabe ist allerdings nicht ganz so leicht.

    also ich kann nur sagen wie ich das machen würde. die definitionen der zahlen weisst du, oder ? hier steht eigentlich alles wichtige drinne. ausgehend von den defs kannste dann anfangen dir erstmal nen algorithmus aufs blatt zu schreiben. also am wichtigsten ist dass du dir zu der gegebenen zahl, die du überprüfen musst, ein array aufschreibst, das die teiler dieser zahl speichert. also

    1: alle teiler der zahl X bestimmen und in einem array abspeichern

    das array kannst du entweder statisch oder dynamisch allozieren. bei der statischen methode musst du mit überläufen rechnen, bei der dynamischen methode musst du mit etwas mehr rechenaufwand und damit programmausführungszeit rechnen.

    abundanz: ist denke ich kein problem

    merkwüdig: ist denke ich auch noch hinzukriegen

    pseudovollkommenen: da muss man schon etwas drüber nachdenken. du musst halt jede kombi ausprobiern. falls eine kombi trifft dann ist die zahl pseudovollkommen. ich würde dir vorschlagen das array als binärfolge zu betrachten und darauf aufbauend dann die kombis durchzuprobieren, also sagen wir mal dein array ist mit 5 teilern belegt, dann probierst du jeder binärzahl durch. überall wo ne 1 ist nimmst du die zahl und addierst sie mit allen anderen stellen die du mit 1 belegst. bisschen komisch zu erklären. gibt bestimmt auch noch bessere lösungen, das ist halt das was mir jetz auf anhieb einfällt. beachte allerdings: jede abundante zahl ist pseudovollkommen, also kannst du dir den einen fall dass alles auf 1 ist sparen.

    gruss

    qualmi

    edit: mir fällt gerade auf dass 'merkwürdig' und 'pseudovollkommen' aufeinmal gelöst werden kann und dass 'merkwürdig' in etwa denselben berechnungsweg bedeutet wie 'pseudovollkommen'. könnte mir auch noch ne rekursion vorstellen, aber da war ich nie fan von.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Qualmi ()