2010-08-05 8 views
1

on m'a dit d'écrire le programme qui génèrent uniques 5 chiffres (par exemple 12 345 est unique et 11234 pas)
i ont écriture de code suivantgénérer uniques 5 nombre chiffres

#include <iostream> 
#include <stdlib.h> 
#include <map> 
using namespace std; 
using std::rand; 
const int k=99999-10234; 
bool unique(int t){ 

    map<int,int>my; 
    map<int,int>::iterator it; 
    while (t!=0){ 
     ++my[t%10]; 
    t/=10; 
} 
    for (it=my.begin();it!=my.end();it++){ 

     if (it->second>0) { 
      return false; 
     } 
    } 

     return true; 
} 
int main(){ 
    int m=0; 
    m= 10234+ rand()%k; 
    if (unique(m)){ 
     cout<<" unique number was generated =:"<<m<<" "; 
    } 
    else{ 

     do{ 


      m=10234+rand()%k; 
       if (unique(m)){ 
        cout<<"unique number was generated"<<m<<" "; 
       break; 
       } 

    } while(!unique(m)); 


    } 


    return 0; 
} 

mais il ne me montre pas toute sortie s'il vous plaît aidez-moi ce qui est mauvais dans mon code?

+2

Vous avez besoin d'une étiquette 'homework'? –

Répondre

5

Je pense que la ligne:

if (it->second>0) { 

devrait être:

if (it->second>1) { 

Depuis quand vous trouvez la première instance d'un chiffre et le mettre dans la carte, il aura la valeur 1 pour ce chiffre sur la carte, pas 0.

+0

oi oui désolé merci ho1 –

3

Je suppose qu'il existe des moyens plus faciles de générer le nombre dont vous avez besoin, par exemple

std::vector<int> digs; 
for (int i = 0; i < 10;++i) 
    digs.push_back(i); // Init digits 

std::random_shuffle(digs.begin(), digs.end()); // Get random 10-digits number 
int result = 0; 
int i = 0; 
while (result < 10000) { // Get 5-digit number from it 
    result*=10; 
    result += digs[i];    
    ++i; 
} 

cout << result << endl; 
+0

C'est l'algorithme le plus intelligent. J'appellerais simplement 'std :: copy (digs.begin(), digs.begin() + 5, std :: ostream_iterator (std :: cout))' directement après le shuffle. Pourquoi dépenser 7 lignes pour obtenir tous les chiffres décimaux dans un int, quand l'opérateur << (ostream &, int) va faire le travail inverse pour les sortir à nouveau? – MSalters

+0

Ces lignes redondantes (?) Servent uniquement à gérer le cas où le 1er chiffre est '0' - donc techniquement les 5 premiers chiffres ne produiront pas de numéro à 5 chiffres. – Vladimir

Questions connexes