Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] Controllare quante volte le cifre di un numero sono contenute in altri numeri

    Ciao a tutti, io ci ho provato scrivendo questo codice che pare funzionare se il numero x è di 2 cifre ma come scrivere l'algoritmo per farlo funzionare in ogni caso?

    Vi allego il mio codice, in testa trovate la traccia del problema:
    codice:
    /*
       Nome del programma: contacifre.cpp   
       Note              : Definire una funzione ContaCifre che prenda in input 
                           un Vettore V di interi di lunghezza N, ed un numero X 
                           e conti quante volte tutte le cifre di X siano contenute
                           negli elementi che compongono il vettore.
                           
                           Esempi.
                           Siano V=[484,325,12,8489,48,12487,1284] ed X=48 ; 
                           ContaCifre(V,7,48) = 4 (sono evidenziati i numeri che 
                           contengono al loro “interno” il numero 48).
    
    */     
    
    #include <cstdlib>
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int contacifre(int [],int,int);
    
    int main(){
        
        int x,n=9;
        int V[9]={484,325,12,8489,48,12487,1284,0,34548};
        
        cout<<"Immetti la Cifra da cercare: ";
        cin>>x;
        
        cout<<"\n\nLe cifre sono "<<contacifre(V,n-1,x)<<endl;
        
        system("pause");
        return 0;
        
    }
    
    int contacifre(int v[],int n,int x){
        int conta=0;
        if(n<0) return 0;
        
        while(n>=0){
                    if(v[n]==x) {conta++;
                    cout<<v[n]<<" "<<conta<<endl;
                    //system("pause");
                    }
                    else{
                         int n1=v[n];
                          cout<<n1<<" "<<conta<<endl;
                          //system("pause");
                         do{
                           if(n1==x) conta++;
                           else if((n1-x)%10==0 && ((n1-x)/10)%10==0) conta++;
                           cout<<n1<<" "<<conta<<endl;
                           //system("pause");
                           n1=n1/10;
                         }while(n1!=0);
                         }
                         n--;
                         }
                         return conta;
    }


    Grazie
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  2. #2
    Io convertirei gli interi del vettore, così come il numero inserito, in due stringe, usanto itoa, e poi confronterei la stringa del numero inserito con ogni stringa derivante dalla conversione dei numeri del vettore tramite strncmp, una cosa del genere:

    codice:
    int j = 0;
    int cont = 0;
    char buff1[10], buff2[10];
    itoa(i, buff1, 10);
    itoa(V[0], buff2, 10);
    
    while (strlen(buff1) + j <= strlen(buff2))
    {
      if(strncmp(buff1, &buff2[j], strlen(buff1)) == 0)
       cont++;
      j++;
    }
    Questo ovviamente per ogni numero del vettore V. Alla fine cont dovrebbe contenere il numero delle volte che la cifra i è stata trovata all'interno delle cifre del vettore V.

  3. #3
    Originariamente inviato da MonsterMash
    Io convertirei gli interi del vettore, così come il numero inserito, in due stringe, usanto itoa, e poi confronterei la stringa del numero inserito con ogni stringa derivante dalla conversione dei numeri del vettore tramite strncmp, una cosa del genere:

    codice:
    int j = 0;
    int cont = 0;
    char buff1[10], buff2[10];
    itoa(i, buff1, 10);
    itoa(V[0], buff2, 10);
    
    while (strlen(buff1) + j <= strlen(buff2))
    {
      if(strncmp(buff1, &buff2[j], strlen(buff1)) == 0)
       cont++;
      j++;
    }
    Questo ovviamente per ogni numero del vettore V. Alla fine cont dovrebbe contenere il numero delle volte che la cifra i è stata trovata all'interno delle cifre del vettore V.
    Sei stato gentlissimo, ho provato il tuo codice e sembra funzionare male. Ad esempio se il numero da cercare è di due cifre il controllo fallisce. Come si potrebbe ovviare a questo?
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  4. #4
    A me funziona il tuo algoritmo...
    Dove riscontri dei problemi?

  5. #5
    Originariamente inviato da gray_fox
    A me funziona il tuo algoritmo...
    Dove riscontri dei problemi?
    Se ti riferisci al primo codice, prova con la ricerca di un numero di due cifre, ame fallisce.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

  6. #6
    Originariamente inviato da Skull260287
    Se ti riferisci al primo codice, prova con la ricerca di un numero di due cifre, ame fallisce.
    Scrivere delle funzioni di test e' essenziale.

  7. #7
    Originariamente inviato da Skull260287
    Se ti riferisci al primo codice, prova con la ricerca di un numero di due cifre, ame fallisce.
    Si ho provato il tuo primo codice. Ho provato con una, due e tre cifre. Sembra essere tutto ok...
    Sai, mi sta venendo un dubbio, non sarà per caso il compilatore? Io ho usato gcc. Tu invece?

  8. #8
    Originariamente inviato da Skull260287
    Sei stato gentlissimo, ho provato il tuo codice e sembra funzionare male. Ad esempio se il numero da cercare è di due cifre il controllo fallisce. Come si potrebbe ovviare a questo?
    Scusa se rispondo solo ora, ma sono stato fuori dall'italia per qualche giorno.

    Ho provato a compilare il codice, e mi sembra che funzioni sempre. Prova a compilare questo, leggermente modificato, e dimmi se ti funziona:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int main(int num, char** arg)
    {
     int j = 0;
     int k;
     int cont = 0;
     char buff1[10], buff2[10];
     int V[10] = {2, 12, 32, 132, 1231, 23, 234, 54, 327, 923};
     int i = 12;
     itoa(i, buff1, 10);
     for (k=0; k<10; k++)
     {
      itoa(V[k], buff2, 10);
      for (j=0; strlen(buff1) + j <= strlen(buff2); j++)
        if(strncmp(buff1, &buff2[j], strlen(buff1)) == 0)
         cont++;
     }
     printf("\nNumero delle occorrenze: %d\n\n", cont);
     return 0;
    }
    Ciao

  9. #9
    Originariamente inviato da MonsterMash
    Scusa se rispondo solo ora, ma sono stato fuori dall'italia per qualche giorno.

    Ho provato a compilare il codice, e mi sembra che funzioni sempre. Prova a compilare questo, leggermente modificato, e dimmi se ti funziona:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int main(int num, char** arg)
    {
     int j = 0;
     int k;
     int cont = 0;
     char buff1[10], buff2[10];
     int V[10] = {2, 12, 32, 132, 1231, 23, 234, 54, 327, 923};
     int i = 12;
     itoa(i, buff1, 10);
     for (k=0; k<10; k++)
     {
      itoa(V[k], buff2, 10);
      for (j=0; strlen(buff1) + j <= strlen(buff2); j++)
        if(strncmp(buff1, &buff2[j], strlen(buff1)) == 0)
         cont++;
     }
     printf("\nNumero delle occorrenze: %d\n\n", cont);
     return 0;
    }
    Ciao
    Grazie mille, modificato in questo modo mi funziona correttamente.
    MondoLibero: Informazione Libera, Varia ed Eventuale
    Sito di informazione varia ed eventuale. Quando ho voglia scrivo di ciò che mi pare. Pubblico guide, recensioni, notizie, critiche e tutto ciò che mi passa sotto mano e che penso sia interessante.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.