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:
#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