2 plik kajaki

Jak czytać dane z pliku tekstowego

FILE *f; // zadeklaruj wskaźnik na plik, na zmienną typu FILE

f = fopen("dane.txt","r"); // przypisz jej wynik działania funkcji fopen
jako parametry tej funkcji podaj:
- nazwę pliku danych
- tryb otwarcia pliku: r – read, w - write, a - append

fscanf(f,”format”,&dana) // czytaj dane funkcją fscanf, podając jej jako pierwszy parametr wskaźnik do pliku

Zadanie

na podstawie zadania z IV Olimpiady Informatycznej) http://www.oi.edu.pl/old/php/show.php?ac=p181600&module=show&file=zadania/oi4/kajaki

Organizujesz spływ kajakowy. Dana jest dopuszczalna ładowność kajaka d, liczba osób n, oraz wagi wszystkich osób. Wyznacz minimalna liczbę potrzebnych kajaków.

Dobrą strategią rozwiązania będzie tu algorytm zachłanny.

Wczytaj d oraz n

Wczytaj dane wszystkich n osób do tablicy o nazwie np. L

Posortuj tablicę L rosnąco: na poczatku będą osoby najlżejsze, na końcu – najcięższe.

Następnie zajmuj kolejne kajaki osobami najcięższymi i sprawdzaj czy uda się dołożyć do każdej z nich osobę aktualnie najlżejszą, jeśli tak to też ją wsadź.
Aktualizuj indeks osoby aktualnie najcięższej i aktualnie najlżejszej przy każdym obsadzeniu kajaka.

i = n-1 // indeks najcięższej osoby która jeszcze czeka na przydział

j = 0 // indeks najlżejższej osoby która jeszcze czeka na przydział

liczbaKajakow = 0

dopóki (j<=i) powtarzaj

i++

liczbaKajakow ++ // przydziel do kajaka aktualnie najcięższą osobę

jeżeli ( L[i]+L[j]<=d) j++ // jeżeli zmieści się z nią najlżejsza osoba, to ją też wsadź

po zakończeniu pętli zwróć liczbęKajakow

Kod programu

#include <cstdio>

#include <algorithm>

int main(){

FILE *plik;

plik = fopen("kaj0.in","r");

int d,n;

fscanf(plik,"%d %d",&d,&n);

printf("kajak zmiesci %d kg, chetnych jest %d osob\n",d,n);

int L[30001];

for (int i=0; i<n; i++) fscanf(plik,"%d",&L[i]);

fclose(plik);

printf(”wczytane wagi osob: \n”);

for (i=0; i<n; i++) printf("%d ",L[i]);

printf("\n");

sort(L,L+n);

printf(”\nposortowane wagi osob: \n”);

for (i=0; i<n; i++) printf("%d ",L[i]);

printf("\n");

int k=0;

int j=0;

i=n-1;

while (j<=i) {

k++;

printf("kajak %d osoba %d",k,L[i]);

if (L[j]+L[i]<=d) {

printf(" i osoba %d \n",L[j]);

j++;

}

else printf("\n");

i--;

}

printf("potrzeba %d kajakow\n",k);

plik = fopen("wynik.out","w");

fprintf(plik,"potrzeba %d kajakow ",k);

fclose(plik);

return 0;

}


Wyszukiwarka

Podobne podstrony:
plik (71) ppt
plik (80) ppt
plik (86) ppt
plik (22) ppt
Dźwięk cyfrowy plik cyfrowy
plik (26) ppt
plik (48) ppt
plik (29) ppt
plik (129)
plik (20)
plik (124)
plik (61)
plik (315)
plik (45)

więcej podobnych podstron