2024_Febbraio.c (download)
#include <stdio.h>
#include <stdlib.h>
#define M 4
#define X_MAX 100
#define INF 100000
void inserisci_x(int *x);
int trova_min(int x, int m[X_MAX + 1], int V[M]);
void stampa_m(int m[X_MAX + 1], int indice, int x);
int main() {
    int V[3][4] = {
        {1, 2, 3, 4},
        {1, 2, 3, 5},
        {1, 2, 3, 6}
    };
    int m[X_MAX + 1] = {0};
    int i, x, y;
    
    inserisci_x(&x);
    
    for(i = 0; i < 3; i++) {
        for(y = 1; y <= x; y++) {
            m[y] = trova_min(y, m, V[i]);
        }
        
        stampa_m(m, i, x);
    }
    
    return 0;
}
void inserisci_x(int *x) {
    do {
        printf("Inserisci un numero nell'intervallo [1, %d]\n", X_MAX);
        scanf("%d", x);
    } while(*x <= 1 || *x > X_MAX);
}
int trova_min(int x, int m[X_MAX + 1], int V[M]) {
    int i;
    int my_min = INF;
    for(i = 0; i < M; i++) {
        int arg = x - V[i];
        if(arg >= 0 && m[arg] < my_min) {
            my_min = m[arg] + 1;
        }
    }
    
    return my_min;
}
void stampa_m(int m[X_MAX + 1], int indice, int x) {
    char nomefile[256];
    sprintf(nomefile, "min_%d.dat", indice);
    FILE *out = fopen(nomefile, "w");
    int y;
    for(y = 0; y <= x; y++) {
        fprintf(out, "%d %d\n", y, m[y]);
    }
    
    fclose(out);
}