Metoda siłowa wyglądałaby mniej więcej tak:
#include "stdio.h"
#define MAX_N 1000
float liczby[MAX_N];
bool liczona[MAX_N];
float suma;
int N;
FILE* plikwe;
FILE* plikwy;
void sprawdz_sume(int i, float suma_czesc)
{
if(i == N)
return;
liczona[i] = false;
sprawdz_sume(i+1,suma_czesc);
suma_czesc += liczby[i];
liczona[i] = true;
sprawdz_sume(i+1,suma_czesc);
if(suma_czesc == suma)
{
for(int k = 0; k <= i; k++)
if(liczona[k])
fprintf(plik_wy, "%f ", liczby[k]);
fprintf(plik_wy, "\n");
}
}
void wczytaj_dane(){
// ta funkcja wczytuje liczby do tablicy liczby[] oraz wczytuje sumę
// oraz ładuje do N liczbę liczb
}
int main(int argc, char* argv[])
{
plikwe = fopen(argv[1], "rt");
plikwy = fopen(argv[2], "wt");
if(argc != 3 || plikwe == 0 || plikwy == 0)
{
printf("Nieprawidlowe paramerty\n");
return 1;
}
wczytaj_dane();
sprawdz_sume(0, 0.0);
fclose(plikwe);
fclose(plikwy);
return 0;
}
Pisałem ten kod na sucho, więc może są tu jakieś błędy, ale ogólna idea myślę że jest czytelna

. Trzeba jeszcze napisać metodę, która wczytuje dane z pliku.
Wywołanie programu to: prog.exe plik_wejściowy.txt plik_wyjściowy.txt