summaryrefslogtreecommitdiffstats
path: root/inf/rtk/2021-državno/5/1
blob: 4497817ad2e58d3fb6d87a7194ac53098cb92084 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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;
}