You are not logged in.

  • Login

1

Tuesday, March 16th 2010, 3:30pm

Ü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

2

Wednesday, March 17th 2010, 12:55am

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.

This post has been edited 1 times, last edit by "Qualmi" (Mar 17th 2010, 1:06am)


Similar threads

Social bookmarks