Leggere un intero n>0 e un k<n. Costruire una lista L di n numeri interi casuali minori di 50 e stampare la lista. Individuare e stampare tutte le sottoliste di k elementi di L la cui somma sia dispari.
IMPORTANTE: Organizzare il programma in funzioni (una per generare la lista, una per stamparla, una per le sottoliste).
Esempio. Sia n = 9 e k = 3. Supponiamo che venga generata la lista:
15 --> 17 --> 37 --> 27 --> 21 --> 32 --> 5 --> 37 --> 9 --> NULL
allora vengono stampate le seguenti sottoliste di 3 elementi la cui somma è dispari:
15 --> 17 --> 37 -->NULL
17 --> 37 --> 27 -->NULL
37 --> 27 --> 21 -->NULL
5 --> 37 --> 9 -->NULL
Questo è ciò che ho fatto io:
codice:#include<stdio.h> #include<stdlib.h> #include<time.h> struct nodo *crealista(); void stampalista(struct nodo *p); int sottolistedispari (); struct nodo{ int dato; struct nodo *next; }; main() { struct nodo *start, *p, *q; start = crealista(); stampalista (start); printf("\n\n\n"); sottolistedispari(); system("PAUSE"); return 0; } struct nodo *crealista() { struct nodo *p, *start, *last; int i, n, x; start = NULL; srand(time(NULL)); printf ("Quanti nodi ha la lista? \n"); scanf("%d", &n); if(n<=0){ printf("Inserisci un numero di nodi maggiore di zero: \n"); scanf("%d", &n); } for(i=0; i<n; i++){ p = (struct nodo *)malloc(sizeof (struct nodo)); if(i == 0) start = p; else last->next = p; p->dato = rand() % (1) + 25; p->next = NULL; last = p; } printf("\n\n\n"); return(start); } void stampalista(struct nodo *p) { while(p != NULL){ printf("%d -->", p->dato); p = p->next; } printf("NULL \n\n\n"); } int sottolistedispari () { struct nodo *p, *start, *last; int i, j, k, n, somma; printf("Quanti nodi hanno le sottoliste? \n"); scanf("%d", &k); if(k >= n){ printf("Inserisci un numero di nodi delle sottoliste inferiore a quello della lista: \n"); } for(i=0; i<n; i++){ for(j=n; j<n-k; j++){ somma = somma + p; p = p->next; } if(somma % 2 != 0){ stampalista(start); } } return; }
Sicuramente ho sbagliato ad effettuare la somma ma non riesco a venirne a capo.
Spero che qualcuno di voi possa aiutarmi...con le liste sono davvero impreparato.
Grazie in anticipo

Rispondi quotando