From 72c9a4a474afe5d7789466ce61bb50ca6220ec67 Mon Sep 17 00:00:00 2001 From: sijanec Date: Sat, 27 Mar 2021 15:56:37 +0100 Subject: naloge rtk --- "inf/rtk/2021-dr\305\276avno/5/1" | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "inf/rtk/2021-dr\305\276avno/5/1" (limited to 'inf/rtk/2021-državno/5/1') diff --git "a/inf/rtk/2021-dr\305\276avno/5/1" "b/inf/rtk/2021-dr\305\276avno/5/1" new file mode 100644 index 0000000..4497817 --- /dev/null +++ "b/inf/rtk/2021-dr\305\276avno/5/1" @@ -0,0 +1,54 @@ +#include +#include +int primerjaj_cela (const void * a, const void * b) { + const int * c = (const int *) a; + const int * d = (const int *) b; + return *c - *d; +} +int postopek (int * l, int n, int * nmvp) { /* funkcija dobi lonce in kazalec na najmanjšo možno vsoto premerov */ + qsort(l, n, sizeof(int), primerjaj_cela); /* zanašamo se na procesor in uporabimo zanj najbolj učinkovit sortirni algoritem */ + nmvp = 0; + int * s = calloc(n, sizeof(int)); /* seznam skladov, sklad v danem trenutku predstavlja najmanjši lonec v njem */ + int sn = 0; /* stevilo skladov, da ni treba venomer vrteti po seznamu in iskati NULL */ + for (int i = n-1; i >= 0; i--) { /* od največjega lonca proti najmanjšemu najdemo primeren sklad, kamor lahko damo lonec */ + for (int j = 0; j < sn; j++) { /* iščemo primeren obstoječ sklad */ + if (s[j] > l[i]) { /* če smo našli primeren dom za lonec (: */ + s[j] = l[i]; + break; + } + } + /* ker ni bilo breaka, smo tukaj, še vedno pa imamo ta velik lonec, ki ne paše v noben obstoječ s, zategadelj naredimo nov s */ + s[sn] = l[i]; + *nmvp += l[i]; /* povečamo najmanjšo možno vsoto premerov */ + } + free(s); + return sn; /* vrnemo število skladov, najmanjšo možno vsoto premerov - nmvp pa smo itak sproti večali */ +} +int main (int argc, char ** argv) { + if (argc < 1+1) { + fprintf(stderr, "uporaba: %s [, diameter lonca 2[, diameter lonca 3[,...]]]\n", argv[0]); + return 1; + } + int * l = calloc(argc, sizeof(int)); + for (int i = 0; i < argc-1; i++) + l[i] = atoi(argv[i+1]); + int nmvp = 0; + int ss = postopek(l, argc-1, &nmvp); + char * slovenscina_je_lep_jezik; + switch (ss % 100) { + case 1: + slovenscina_je_lep_jezik = ""; + case 2: + slovenscina_je_lep_jezik = "a"; + case 3: + case 4: + slovenscina_je_lep_jezik = "e"; + case 0: + default: + slovenscina_je_lep_jezik = "ov"; + } + fprintf(stdout, "potrebujemo najmanj %d sklad%s, najmanjša možna vsota premerov pa je %d.\n", + ss, slovenscina_je_lep_jezik, nmvp); + free(l); + return 0; +} -- cgit v1.2.3