Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //RISPOSTA 2
- int massimo(int a[], int n, int pos);
- void F_i(int F[],int A[],int size);
- void printarray(int x[],int size);
- //dichiarazione delle funzioni
- int main() {
- int n,n2,i=0;
- int *a, *b, *F;
- //dichiaro i 3 array, due che contengono gli array dei follower del caso 1(a) e caso2(b)
- // e F che è l'array delle assegnazioni dei follower
- printf("Inserisci dimensione array CASO 1:");
- scanf("%d",&n);
- //leggo in input la dimensione n del primo array di interi
- a= (int*)calloc(n,sizeof(int));
- //alloco la memoria per il primo array di interi dimensione n
- printf("Inserisci elementi array CASO 1:");
- do {
- scanf("%d", &a[i++]);
- }
- while (getchar()!="\n" && i<n);
- //leggo gli elementi del primo array(posso mettere tutti gli elementi separati da uno spazio e premere invio)
- F= (int*)calloc(n,sizeof(int));
- //alloco la memoria per l'array F che associa ad ogni persona i la persona che segue F[i]
- //la dimensione sarà il numero degli utenti quindi uguale all'array letto in input
- printf("Inserisci dimensione array CASO 2:");
- scanf("%d",&n2);
- i=0;
- b= (int*)calloc(n2,sizeof(int));
- printf("Inserisci elementi array CASO 2:");
- do {
- scanf("%d", &b[i++]);
- }
- while (getchar()!="\n" && i<n2);
- F_i(F,a,n);
- printf("\nCaso #1: "); //Caso #1: 2 2 1 2
- printarray(F,n);
- free(F);
- //libera la memoria allocata da F
- F= (int*) calloc(n2,sizeof(int));
- F_i(F,b,n2);
- printf("\nCaso #2: "); //Caso #2: 1 3 3 4 6 3 0 3
- printarray(F,n2);
- return 0;
- }
- int massimo(int a[], int n, int pos){
- /**
- * funzione che ritorna l'indice dell'elemento massimo di un array che non sia pos
- * perché l'unico follower degli utenti è diverso da se stesso@
- * @param a[](stessa cosa di *a):array in input
- * @param n: dimensione dell'array
- * @param pos: indice dell'utente
- */
- int max= (pos!=0) ? 0 : 1;
- //perché nel caso in cui l'utente sia 0 non vogliamo che gli venga assegnato come follower sé stesso
- for(int i=0; i<n; i++){
- if(a[i]>=a[max] && i!=pos)
- max=i;
- }
- return max;
- }
- void F_i(int F[],int A[],int size){
- /**
- * funzione che riempe l'array F che associa ad ogni utente i l'utente seguito F[i]
- * @param F: array da riempire
- * @param A: array dei follower che associa ad ogni utente il nuemro di follower
- * @size : dimensione dell'array A che sarà anche uguale a quella di F(numero degli utenti)
- */
- int max;
- for(int i=0;i<size;i++){
- max=massimo(A,size,i);
- F[i]= max;
- A[max]--;
- }
- }
- void printarray(int x[],int size){
- /**
- * funzione che stampa gli elementi di un array separati da uno spazio
- * @param x[]:array da stampare
- * @param size: dimensione dell'array
- */
- for(short int i=0;i<size;i++){
- printf("%d ",x[i]);
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement