Entwickler-Ecke

Sonstiges (Delphi) - Problem mit Quersumme


Delphi Noob - Mi 14.12.05 19:20
Titel: Problem mit Quersumme
ich muss eine zahl finden deren quersumme durch 2006 teilbar ist.

das ist mein code, irgendwas ist da falsch vielleicht könnt ihr mir ja helfen.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var suchwert, i,nummer:integer; zahl:string;
begin
nummer:=99999;
while suchwert mod 2006 <>0 do begin
inc(nummer);
zahl:=inttostr(nummer);
for i:=1 to length(zahl) do
suchwert:=suchwert+strtoint(zahl[i]);
end;
zahl1.caption:=zahl;
end;


Alstar - Mi 14.12.05 19:29
Titel: Re: Problem mit Quersumme
Probiers mal so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var 
  suchwert, i,nummer:integer; 
  zahl:string;
begin
  nummer:=99999;
  while (suchwert mod 2006) <> 0 do begin
    inc(nummer);
    zahl:=inttostr(nummer);
    sucherwert := 0;
    for i:=1 to length(zahl) do
      suchwert:=suchwert+strtoint(zahl[i]);
  end;
  zahl1.caption:=zahl;
end;


Alstar

Edit: Source eingerückt


Delphi Noob - Mi 14.12.05 19:48

sicher, dass das so funktioniert, bei mir sucht er sich tot.

was hast du denn da raus ?


jaenicke - Mi 14.12.05 20:00

@Alstar: sucherwert? da ist ein er zu viel!

@Delphi Noob: Setz doch nummer auf 100298 und debugge (also mit haltepunkt auf nummer := ...), da müsste ja nach dem zweiten Durchlauf nummer = 100300 sein, und 100300 mod 2006 ist ja 0. Also müsste er dann beim dritten Beginn der Schleife abbrechen...


Alstar - Mi 14.12.05 20:09

Ja, ist ein "er" zuviel.

Aber folgendes: Teil mal 2006 durch 9. Das sind knapp 223. Das heißt, dass du eine Zahl mit 222 9 und einer 8 brauchst, damit die Quersumme 2006 ergibt (ist nur ein Beispiel).

Alstar


Delphi Noob - Mi 14.12.05 20:28

Also ich wollte ja eigentlich auch noch einen Teil der Aufgabe selber machen aber ich schreibe hier mal die genau Aufgabe:

Man finde zwei aufeinander folgende positive ganze Zahlen, deren Quersummen beide durch 2006 teilbar sind


Alstar - Mi 14.12.05 20:38

user profile iconDelphi Noob hat folgendes geschrieben:
[...]Man finde zwei aufeinander folgende positive ganze Zahlen, deren Quersummen beide durch 2006 teilbar sind


Ich würd mal sagen: Nach dieser Aufgabenstellung gibt es keine zwei Zahlen, die das erfüllen.
Aufeinanderfolgend heißt: Die letzte Ziffer ist um eins größer bzw. eins geringer wie die der vorherigen Zahl. Das beeinflusst die Quersumme um +/-1.
Jetzt finde mal zwei aufeinanderfolgende natürliche Zahlen, für die gilt n1*x Teiler von 2006 (n1+1)*x Teiler von 2006.
Ich behaupte mal, dass es die nicht gibt.

Alstar

Edit: Es ist maximal möglich, dass die beiden Quersummen Teiler von 2006 sind


Delphi Noob - Mi 14.12.05 20:41

user profile iconDelphi Noob hat folgendes geschrieben:
Also ich wollte ja eigentlich auch noch einen Teil der Aufgabe selber machen aber ich schreibe hier mal die genau Aufgabe:

Man finde zwei aufeinander folgende positive ganze Zahlen, deren Quersummen beide durch 2006 teilbar sind




mir ist gerade aufgefallen das es möglicher weise auch daran liegen kann das die integer komponente viel zu lang ist bei über 200 zeichen.

welche komponente kann denn dafür nehmen die zahlen mit sehr vielen ziffern als wert annehmen kann und auch integer eigenschaften hat ?


Alstar - Mi 14.12.05 20:43

Siehe meinen Beitrag oben: Es gibt imho keine Zahlen, die dieses Kreterium erfüllen

Alstar


facu!ty - Mi 14.12.05 21:08

doch es gibt diese beiden zahlen, nur glaube ich nicht, dass delphi einen zahlentypen hat, der genug stellen für diese zahl hat. die beiden zahlen haben in meinem beispiel 446 Stellen:
Die ersten 222 stellen sind 9en, die nächste eine 7 und die nächsten 223 Stellen sind wieder 9en.
445*9+7=4012 4012/2006=2
Bei der zweiten zahl sind die ersten 222 stellen logischerweise wieder 9en, die nächste stelle ist eine 8 und danach kommen 223 nullen.
222*9+8=2006 2006/2006=1

P.S. viel spass beim wettbewerb :)


Alstar - Mi 14.12.05 21:10

Lies doch mal genau:
Zitat:

zwei aufeinander folgende positive ganze Zahlen


Alstar


facu!ty - Mi 14.12.05 21:12

sie sind doch aufeinanderfolgend. wenn die letzten 223 stellen 9en sind werden sie bei der darauffolgenden zahl zu nullen und die zahl davor erhöht sich um eins.


Maximov - Mi 14.12.05 21:14

Ich möcht das zwar hier nicht mies machen, aber du weißt schon das du eine SELBSTÄNDIGKEITS-Erklärung beim Bundeswettbewerb Mathematik unterschreibst, wenn du es abschickst?

Dies ist die Aufgabe 1 des Bundeswettbewerb Mathematik 2006.

PS: Die Aufgabe ist wenn man ein bisschen drüber nachdenkt einfach, da braucht man kein Programm ;)

MFG
Maximus


Alstar - Mi 14.12.05 21:19

user profile iconfacu!ty hat folgendes geschrieben:
sie sind doch aufeinanderfolgend. wenn die letzten 223 stellen 9en sind werden sie bei der darauffolgenden zahl zu nullen und die zahl davor erhöht sich um eins.

Klingt logisch :oops:

Ich nehme alles zurürck und behaupte das Gegenteil

(Und sowas wie ich hat Mathe-LK :cry:)

Alstar


Gausi - Mi 14.12.05 21:28

user profile iconMaximov hat folgendes geschrieben:
Dies ist die Aufgabe 1 des Bundeswettbewerb Mathematik 2006.

Yep, ist es, und daher

*closed*