Domanda Esercizio C

UnskilledGirl

Utente Iron
8 Novembre 2021
1
1
0
3
Buongiorno, ho un esercizio da risolvere in C mediante array con questa traccia: Leggi 10 numeri interi da tastiera e visualizzali in sequenza senza stampare uno stesso numero due volte per esempio:
valore dell'array: 15,3,5,3,15,5,15,11;
valori stampati: 15,3,5,11;
Qualcuno riuscirebbe a risolverlo? Grazie in anticipo a chiunque cerchi di aiutare.
 
Senza ordinare l'array serve un secondo array e scorrerlo per ogni elemento per evitare duplicati:
C:
#define N 10

int main()
{
    int nums[N];
    int printedNums[N];
    int i, j, found, nPrinted = 0;

    for (i = 0; i < N; i++)
    {
        printf("Inserisci un numero: ");
        scanf("%d", &nums[i]);
    }

    printf("Valori dell'array: ");
    for (i = 0; i < N; i++)
        printf("%d, ", nums[i]);

    printf("\nValori stampati: ");
    for (i = 0; i < N; i++)
    {
        found = 0;
        for (j = 0; j < nPrinted; j++)
        {
            if (printedNums[j] == nums[i])
            {
                found = 1;
                break;
            }
        }
        if (!found)
        {
            printf("%d, ", nums[i]);
            printedNums[nPrinted++] = nums[i];
        }
    }
    return 0;
}

Esempio di output:
Codice:
Inserisci un numero: 15
Inserisci un numero: 3
Inserisci un numero: 5
Inserisci un numero: 3
Inserisci un numero: 15
Inserisci un numero: 5
Inserisci un numero: 15
Inserisci un numero: 11
Inserisci un numero: 4
Inserisci un numero: 7
Valori dell'array: 15, 3, 5, 3, 15, 5, 15, 11, 4, 7,
Valori stampati: 15, 3, 5, 11, 4, 7,
 
Ultima modifica da un moderatore:
o anche, usando qualche k di memoria per ridurre il codice, e dando un limite al valore massimo di input:

C:
#include <stdio.h>
#include <string.h>

#define MAX_NUM    10000

static char map[MAX_NUM + 1];

int main() {
    int x, num;

    for (x = 0; x < 10; ++x) {
        printf("inserisci un cavolo di numero [da 0 a 10000] : ");
        scanf("%d", &num);
        if (num > MAX_NUM) {
            printf("numero fuori range, riprova\n");
            continue;
        }
        map[num] = 1;
    }

    printf("ok, ecco l'elenco per il prof, che sara' felice \n");
    for (x = 0; x < MAX_NUM; ++x) {
        if (map[x])
            printf("%d\n", x);
    }

    return 0;
}

- su moderni pc c'e' ram a dismisura, usarla non e' reato
- si puo contenere la memoria anche usando una bitmask (map 8 volte piu piccola)


ps: se lo usi, fammi sapere che voto ho preso.