summaryrefslogtreecommitdiffstats
path: root/inf/rtk/2021-državno/5/1
diff options
context:
space:
mode:
Diffstat (limited to 'inf/rtk/2021-državno/5/1')
-rw-r--r--inf/rtk/2021-državno/5/154
1 files changed, 54 insertions, 0 deletions
diff --git a/inf/rtk/2021-državno/5/1 b/inf/rtk/2021-državno/5/1
new file mode 100644
index 0000000..4497817
--- /dev/null
+++ b/inf/rtk/2021-državno/5/1
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <stdlib.h>
+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 1>[, 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;
+}