Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * File: main.c
- * Author: duke
- *
- * Created on 6. květen 2011, 15:10
- */
- #include <stdio.h>
- #include <stdlib.h>
- /*
- *
- */
- void quicks(unsigned int *pole, const unsigned int levy_usek, const unsigned int pravy_usek) {
- unsigned int levy, pravy;
- unsigned int pivot, pom;
- levy = levy_usek;
- pravy = pravy_usek;
- pivot = pole[(levy + pravy) / 2]; // vybereme pivota
- //printf("pivot: pole[%u] = %u\n", (levy + pravy) / 2, pivot);
- do {
- while (pole[levy] < pivot)
- levy++;
- while (pivot < pole[pravy])
- pravy--;
- if (levy <= pravy) {
- pom = pole[levy];
- pole[levy] = pole[pravy];
- pole[pravy] = pom;
- levy++;
- pravy--;
- }
- } while (levy <= pravy);
- if (levy_usek < pravy)
- quicks(pole, levy_usek, pravy); // razeni leve casti
- if (levy < pravy_usek)
- quicks(pole, levy, pravy_usek); // razeni prave casti
- }
- int main(int argc, char** argv) {
- long int predmety[20];
- int pocetPredmetu;
- unsigned int v, i = -1, suma = 0, prvni = 0, druhy = 0, treti = 0, prumer;
- printf("Zadejte pocet predmetu:\n");
- v = scanf("%d", &pocetPredmetu);
- if (v != 1 || pocetPredmetu < 3) {
- printf("---Vysledky---\n");
- printf("Nespravny vstup.\n");
- exit(1);
- }
- printf("Zadejte cenu jednotlivych predmetu:\n");
- for (i = 0; i < pocetPredmetu; i++) {
- v = scanf("%d", &predmety[i]);
- suma = suma + predmety[i]; // pocitani celkoveho souctu
- if (v != 1) {
- printf("---Vysledky---\n");
- printf("Nespravny vstup.\n");
- exit(1);
- }
- }
- for (i = 0; i < pocetPredmetu; i++) { // kontrola kladnosti hodnot, protoze to jinak asi nejde
- if (predmety[i] <= 0) {
- printf("---Vysledky---\n");
- printf("Nespravny vstup.\n");
- exit(1);
- }
- }
- //printf("suma je: %d\nMod3 = %d\n", suma, suma % 3);
- if (suma % 3 != 0) { // pokud neni soucet delitelny tremi
- printf("---Vysledky---\n");
- printf("Predmety nelze rozdelit spravedlive.\n");
- exit(1);
- }
- prumer = suma / 3;
- for (i = 0; i < pocetPredmetu; i++) { // pokud je nejaky predmet vetsi, nez ma kazdy mit
- //printf("predmet %d ma hodnotu %d\n", i, predmety[i]);
- if (predmety[i] > prumer) {
- printf("---Vysledky---\n");
- printf("Predmety nelze rozdelit spravedlive.\n");
- exit(1);
- }
- }
- quicks(predmety, 0, pocetPredmetu - 1); // serazeni pole pro dalsi pocitani
- i = pocetPredmetu - 1;
- do { // prvni dostava
- if (i < 0) { // kdyz uz neni z ceho brat
- printf("---Vysledky---\n");
- printf("Predmety nelze rozdelit spravedlive.\n");
- exit(1);
- }
- if (prvni + predmety[i] <= prumer) { // zkusime mu dat nejvice hodnotny kus
- prvni = prvni + predmety[i];
- predmety[i] = 0; // predmet uz neni volny
- }
- i--; // presun na mene nahodny kus
- } while (prvni < prumer); // pokud jeste nema dost
- i = pocetPredmetu - 1;
- do { // druhy dostava
- if (i < 0) { // kdyz uz neni z ceho brat
- printf("---Vysledky---\n");
- printf("Predmety nelze rozdelit spravedlive.\n");
- exit(1);
- }
- if (druhy + predmety[i] <= prumer) { // zkusime mu dat nejvice hodnotny kus
- druhy = druhy + predmety[i];
- predmety[i] = 0; // predmet uz neni volny
- }
- i--; // presun na mene nahodny kus
- } while (druhy < prumer); // pokud jeste nema dost
- i = pocetPredmetu - 1;
- do { // treti dostava
- if (i < 0) { // kdyz uz neni z ceho brat
- printf("---Vysledky---\n");
- printf("Predmety nelze rozdelit spravedlive.\n");
- exit(1);
- }
- if (treti + predmety[i] <= prumer) { // zkusime mu dat nejvice hodnotny kus
- treti = treti + predmety[i];
- predmety[i] = 0; // predmet uz neni volny
- }
- i--; // presun na mene nahodny kus
- } while (treti < prumer); // pokud jeste nema dost
- // v tuto chvili maji vsichni stejne
- printf("---Vysledky---\n");
- printf("Predmety lze rozdelit spravedlive.\n");
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement