2016-12-09 3 views
0
#include <bits/stdc++.h> 

using namespace std; 

int main() 
{ 
    srand(time(NULL)); 
    int number = (rand() % 9000)+1000; 
    cout<<number<<endl; 
} 

Dieser Code hilft, eine 4-stellige Zahl bei der Erzeugung aber keine selbständigen dh es erzeugt Zahlen wie 4545, 1561, 9999 etc .. während ich Zahlen will wie 1234, 2395 etc ...Wie generiert man eine 4 verschiedene Ziffern Zufallszahl in C++?

+2

Warum generieren Sie nicht einfach mehrere Zahlen, bis Sie eine mit anderen Ziffern sehen? – alexeykuzmin0

+1

** Empfohlene Lektüre: * [Warum sollte ich nicht enthalten?] (Http://stackoverflow.com/q/31816095/560648) *** –

+0

Ich arbeite an einem Spiel Bulls und Kühe, es braucht nur bestimmte Ziffern Zufallszahlen generiert werden –

Antwort

1

Sie könnten Rollen Sie die Zahlen, bis Sie eine mit verschiedenen Ziffern erhalten, aber das wäre äußerst ineffizient.

können Sie entweder:

  • die erste Ziffer, erzeugen und dann
  • jeweils nächste Ziffer erzeugen, bis er sich von den vorherigen unterscheidet
  • setzen alle Ziffern zusammen die Nummer
zu bilden

oder (sehr effizient):

  • Rolle eine Zahl zwischen 0-9 für die erste Stelle d1
  • Rolle einer Zahl zwischen 0-8 für die zweite Ziffer d2, wenn d2>=d1 dann d2 += 1
  • Rolle einer Zahl zwischen 0-7 für die dritte Stelle gesetzt, usw. ...
+0

Ich denke, die dritte Ziffer kann gleich sein wie zuerst, wenn wir dem zweiten Ansatz folgen (effizient) –

+0

gut der Algorithmus wie in der Antwort geschrieben ist nicht vollständig. Für die dritte Zahl müssen Sie '+ = 1', wenn es'> = d1' ist und '+ = 1', wenn es'> = d2' ist und diese Überprüfungen und Inkremente müssen tatsächlich in aufsteigender Reihenfolge durchgeführt werden Ziffern. Ich wollte nicht zu sehr ins Detail gehen, sondern habe nur die allgemeine Idee geschrieben. SO ist kein Code-Schreib-Service nach allem: P – user463035818

+0

haha ​​ja, gut dann ... Danke –

Verwandte Themen