J'ai donc ce code:

#include <stdio.h>
#include <stdlib.h>

int main() {

    char a[200], b = 0;
    int x;
    x = 100 + rand() % 200;
    for (int i = 0; i < x; i++) {
        a[i] = 'a' + rand() % 26;
    }

    for (int i = 0; i < x; i++) {
        if (b % 10 == 0) { 
            printf("\n%c ", a[i]); 
            b = 0;
        }
        else {
            printf("%c ", a[i]);
        }
        b++;
    }
    printf("\n");

    return 0;

}

Le but est que je devrais générer un tableau aléatoire de lettres de «a» à «z» (ce que j'ai réussi à faire) et ensuite imprimer un nouveau tableau sans éléments qui se répètent dans le premier tableau. J'ai essayé d'implémenter le code ici pour supprimer les éléments en double mais cela n'a pas fonctionné dans mon code.

0
Sven B 19 avril 2017 à 16:56

3 réponses

Meilleure réponse

Une solution simple consiste à boucler sur le tableau et à copier chaque élément dans un nouveau tableau, mais vérifier d'abord que la valeur n'existe pas déjà dans le nouveau tableau.

1
Some programmer dude 19 avril 2017 à 14:00

Une solution O(n), en supposant que votre tableau ne contienne que des lettres a à z , consiste à créer un autre petit tableau de 26 entiers initialisés à des zéros, exist[26] , puis pour chaque lettre du tableau principal,

  • si exist[letter - 'a'] > 0 ne l'imprime pas
  • sinon imprimez-le et incrémentez exist[letter - 'a']

Par exemple,

int exist[26] = { 0 };

for(int i=0 ; i<x ; i++) {
   if (exist[a[i] - 'a'] == 0) {
      exist[a[i] - 'a']++;
      printf("%c ", a[i]);
   }
}
0
e2-e4 19 avril 2017 à 14:14

Pour commencer, le programme a un comportement indéfini en raison de la déclaration

x = 100 + rand() % 200;

Car la valeur calculée de la variable x peut dépasser la taille du tableau.

Je pense que vous voulez dire

x = 1 + rand() % 200;
   ^^^

Il est également souhaitable d'appeler la fonction standard srand pour obtenir différentes séquences aléatoires lors de l'exécution du programme.

Le programme peut ressembler à ceci.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N   200

int main(void) 
{
    char s[N];
    size_t n;

    srand( ( unsigned int )time( NULL ) );

    n = 1 + rand() % N;

    for ( size_t i = 0; i < n; i++ )
    {
        s[i] = 'a' + rand() % ( 'z' - 'a'  + 1 ); 
    }

    for ( size_t i = 0; i < n; i++ )
    {
        putchar( s[i] );
        if ( ( i + 1 ) % 10 == 0 || i + 1 == n ) putchar( '\n' );
    }

    putchar( '\n');

    size_t m = 0;

    for ( size_t i = 0; i < n; i++ )
    {
        size_t j = 0;
        while ( j < m && s[j] != s[i] ) j++;

        if ( j == m )
        {
            if ( m != i ) s[m] = s[i];
            ++m;
        }
    }

    n = m;

    for ( size_t i = 0; i < n; i++ )
    {
        putchar( s[i] );
        if ( ( i + 1 ) % 10 == 0 || i + 1 == n ) putchar( '\n' );
    }

    putchar( '\n');

    return 0;
}

Sa sortie pourrait être comme

bimiwgnkew
tphzfidwmn
yqoyoxbbxd
kalxljfyvj
upzdoglrez
edsubgsfjr
kvrvscgadb
lxsmdhuoaz

bimwgnketp
hzfdyqoxal
jvursc
0
Vlad from Moscow 19 avril 2017 à 14:31