Prinzip! 5000 Ziffern in Zahlenreihe bis X?

Neue Frage »

hotgrafx Auf diesen Beitrag antworten »
5000 Ziffern in Zahlenreihe bis X?
Hallo Leute!

Wir sitzen hier grade vor einem - für uns - unlösbarem Rätsel:

Ein Kunde von uns benötigt 5000 einzelne Ziffern von 0 bis 9.
Aber in der Verteilung, wie oft die einzelnen Ziffern in den Zahlen vorkommen.
Außerdem bis zu der Zahl, die aus den 5000 Ziffern als höchste Zahl möglich ist.

Wä???

Hat jemand eine Idee, wie das zu lösen ist? Ich komme mir grade unendlich dumm vor. unglücklich

Danke!!!

Michael
Steffen Bühler Auf diesen Beitrag antworten »
RE: 5000 Ziffern in Zahlenreihe bis X?
Zitat:
Original von hotgrafx
Ein Kunde von uns benötigt 5000 einzelne Ziffern von 0 bis 9.
Aber in der Verteilung, wie oft die einzelnen Ziffern in den Zahlen vorkommen.
Außerdem bis zu der Zahl, die aus den 5000 Ziffern als höchste Zahl möglich ist.


Geht's hier vielleicht um das Benfordsche Gesetz?

Viele Grüße
Steffen
 
 
hotgrafx Auf diesen Beitrag antworten »

Frag mich was einfacheres. unglücklich

Sieht auf alle Fälle schon mal irgendwie gut aus. Ich krieg trotzdem noch immer Stresspickel! unglücklich

Komme einfach auf kein nachvollziehbares Ergebnis.
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von hotgrafx
Sieht auf alle Fälle schon mal irgendwie gut aus.


Ich hab mich nicht sehr viel damit beschäftigt, und kann Dir die Formel auch nicht erklären, dazu müßtest Du am besten einen neuen Thread starten.

Allerdings kannst Du auch brute force verwenden: eine Anwendung programmieren (lassen), die das Auftreten der Ziffern 0 bis 9 in den Zahlen bis (also füntausend Neunen hintereinander) feststellt und den prozentualen Anteil bestimmt.

Viele Grüße
Steffen
hotgrafx Auf diesen Beitrag antworten »

Es sind ja keine 5000 Neunen oder Einsen. ...es sollen INSGESAMT 5000 Ziffern in der tatsächlichen Zahlenverteilung sein, die damit erreichbar ist.

Ich denke da komme ich bei einer Brute Force Methode auch nicht weiter, da ich dort ja ein Ziel brauche, welches ich erst ermitteln muss. Das ist ja mein Dilemma.
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von hotgrafx
Es sind ja keine 5000 Neunen oder Einsen. ...es sollen INSGESAMT 5000 Ziffern in der tatsächlichen Zahlenverteilung sein, die damit erreichbar ist.


verwirrt

Kannst Du eventuell die genaue Anforderung Deines Kunden hinschreiben?

Viele Grüße
Steffen
hotgrafx Auf diesen Beitrag antworten »

Okay. Ich probiers mal:

Er benötigt 5000 einzelne Ziffern, die er verkleben will um daraus Zahlen zu bilden. Ziffern sind logischerweise dann 0 - 9. Da aber nicht jede Ziffer gleich oft in den Zahlen vorkommt, möchte er diese in der Tatsächlich vorkommenden möglichen Anzahl gefertigt bekommen.

Da er aber insgesamt 5000 EINZELNE Ziffern haben möchte, und nicht sagen kann, bis zu welcher ZAHL seine gewünschte Produktion gehen soll, steh ich echt wie der Ochse vor dem Berg.

Also:

5000 Stück einzelne Ziffern 0 bis 9.
Das ganze hin zu der Zahl, die sich daraus bilden lässt, bis die Menge von 5000 Stück ausgeschöpft ist.

Ich glaube jetzt hab ichs deutlich ausgedrückt, oder?

Danke!

Michael
René Gruber Auf diesen Beitrag antworten »

Was bedeutet dieses den in deiner Beschreibung

Zitat:
Original von hotgrafx
Aber in der Verteilung, wie oft die einzelnen Ziffern in den Zahlen vorkommen.

darauf hast du bisher immer noch nicht klar und deutlich geantwortet. unglücklich


Deinen letzten Beitrag, insbesondere den Start

Zitat:
Original von hotgrafx
Er benötigt 5000 einzelne Ziffern, die er verkleben will um daraus Zahlen zu bilden. Ziffern sind logischerweise dann 0 - 9. Da aber nicht jede Ziffer gleich oft in den Zahlen vorkommt, möchte er diese in der Tatsächlich vorkommenden möglichen Anzahl gefertigt bekommen.

würde ich jetzt so deuten:

Es werden fortlaufend (!) die Seriennummern von bis aus Ziffern gelegt, so dass am Ende dafür 5000 Ziffern verbraucht werden. Zu bestimmen ist (zumindest als Hilfsgröße) sowie die tatsächlich benötigten Anzahlen der Ziffern 0,1,...,9.
hotgrafx Auf diesen Beitrag antworten »

Ganz genau so!!!
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von hotgrafx
Ganz genau so!!!


Na, dann eben doch mit brute force:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
	int i=1;
	int anzahlZiffern=0;

	while(anzahlZiffern<5000)
	{
		anzahlZiffern++;
		if (i>9)
			anzahlZiffern++;
		if (i>99)
			anzahlZiffern++;
		if (i>999)
			anzahlZiffern++;
		i++;
	}
	printf("%d - %d\n", i, anzahlZiffern);


Die Ausgabe ist dann:
1528 - 5001

Das heißt, Dein Kunde kann Zahlen bis 1527 damit legen und hat dann noch drei Ziffern übrig.

Viele Grüße
Steffen
hotgrafx Auf diesen Beitrag antworten »

Wow!!! geschockt

Aber damit habe ich noch immer nicht die Anzahl der einzelnen Ziffern, die ich dafür produzieren muss. Wie bekomme ich denn DIE dann raus?
René Gruber Auf diesen Beitrag antworten »

@Steffen

Und jetzt bitte noch das Programm anpassen, dass die einzelnen Ziffernanzahlen ausgegeben werden. Big Laugh

Ganz ehrlich: Muss es hier wirklich Brutforce sein, wo es doch auch so ganz gut und schnell zu lösen ist? Aber vielleicht sollte ich die Klappe halten, da ich auch ganz gern brutforce. Augenzwinkern


P.S.: Im übrigen hast du dich verzählt, es geht nur bis 1526 mit 3 übrigbleibenden Ziffern. Das Inkrement i++ am Ende der Schleife erweist sich als verhängnisvoll. Big Laugh
hotgrafx Auf diesen Beitrag antworten »

Gut und schnell?! Aaaaaaaaargh! Ich werd noch doof.

Sag mir bitte wie!!! Gott
René Gruber Auf diesen Beitrag antworten »

Erstmal durchzählen

* alle einstelligen Zahlen 1..9: Ziffern
* alle zweistelligen Zahlem 10..99: Ziffern
* alle dreistelligen Zahlem 100..999: Ziffern

Macht bisher summa summarum Ziffern für alle Zahlen bis einschließlich 999.

Das gesuchte ist ganz offenbar eine vierstellige Zahl, für alle vierstelligen Zahlen von bis braucht man nun noch zusätzliche Ziffern. Aus der Bestimmungs(un)gleichung



kann man nun das maximal mögliche bestimmen.
hotgrafx Auf diesen Beitrag antworten »

Zitat:
Original von René Gruber

* alle zweistelligen Zahlem 10..99: Ziffern


Muss das nicht 89 x 2 sein? verwirrt
Steffen Bühler Auf diesen Beitrag antworten »

Zitat:
Original von René Gruber
Und jetzt bitte noch das Programm anpassen, dass die einzelnen Ziffernanzahlen ausgegeben werden. Big Laugh


Stimmt, hab ich überlesen:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
	int i;
	int ziffer[10];
	int zahl;
	int einer, zehner, hunderter, tausender;

	for (i=0;i<10;i++)
		ziffer[i]=0;

	for (i=1;i<=1526;i++)
	{
		zahl = i;
		einer = zahl % 10;
		zahl /= 10;
		zehner = zahl % 10;
		zahl /= 10;
		hunderter = zahl % 10;
		zahl /= 10;
		tausender = zahl % 10;
		ziffer[einer]++;
		if (i>9)
			ziffer[zehner]++;
		if (i>99)
			ziffer[hunderter]++;
		if (i>999)
			ziffer[tausender]++;
	}

	for (i=0;i<10;i++)
		printf("%d - %d\n", i, ziffer[i]);


Ausgabe:
0 - 402
1 - 1040
2 - 510
3 - 503
4 - 503
5 - 430
6 - 403
7 - 402
8 - 402
9 - 402

Zitat:

Ganz ehrlich: Muss es hier wirklich Brutforce sein, wo es doch auch so ganz gut und schnell zu lösen ist?


Natürlich nicht. Aber ich kam nicht auf Deine Lösung.

Zitat:

Aber vielleicht sollte ich die Klappe halten, da ich auch ganz gern brutforce. Augenzwinkern


Prost

Zitat:

P.S.: Im übrigen hast du dich verzählt, es geht nur bis 1526 mit 3 übrigbleibenden Ziffern. Das Inkrement i++ am Ende der Schleife erweist sich als verhängnisvoll. Big Laugh


Hab ich beim Zusammenzählen der obigen Ergebnisse auch gemerkt. Sorry. Aber Programmierer verzählen sich halt maximal um Eins.

Viele Grüße
Steffen
René Gruber Auf diesen Beitrag antworten »

@hotgrafx

Nein: Von 10 bis 99 (Grenzen einschließlich) sind es 90 Zahlen.


Zu den einzelnen Ziffernanzahlen: Das ist in der Tat zu Fuß etwas mühselig.

code:
1:
2:
3:
4:
5:
6:
7:
                                                   1    2    3    4    5    6    7    8    9    0
* die Endziffern der Zahlen 1..1526:              153  153  153  153  153  153  152  152  152  152
* die zweitletzten Ziffern der Zahlen 10..1526:   160  157  150  150  150  150  150  150  150  150
* die drittletzten Ziffern der Zahlen 100..1526:  200  200  200  200  127  100  100  100  100  100
* die viertletzten Ziffern der Zahlen 1000..1526: 527
--------------------------------------------------------------------------------------------------
                                                 1040  510  503  503  430  403  402  402  402  402
hotgrafx Auf diesen Beitrag antworten »

Freude Freude Freude

Ich könnt euch knutschen!!!! Tanzen

1000 Dank! Gott
tigerbine Auf diesen Beitrag antworten »
Boardprinzip
Zitat:
Ein Kunde von uns benötigt 5000 einzelne Ziffern von 0 bis 9.


Ich darf hier auf das Boardprinzip verweisen, wohl eher in Richtung Zukunft. Auch wenn das Problem interessant ist, arbeiten wir nicht für Firmen und stellen gratis Know-How zur Verfügung.

Nutzungsbedingungen.
Zitat:
9. Persönliche und private Nutzung
Das Angebot ist nur zur privaten Nutzung freigegeben. Eine gewerbliche Nutzung bedarf immer einer vorherigen Abstimmung und schriftlichen Genehmigung der click for knowledge GmbH. Eine Nutzung des Angebots erfolgt immer auf eigene Gefahr, für die angebotenen Informationen übernimmt die click for knowledge GmbH keine Verantwortung.

Der persönliche Bereich des Nutzers darf weder verkauft, lizenziert, verschenkt noch sonst der Nutzung durch Dritte überlassen werden.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »