Função de balanceamento
This commit is contained in:
parent
4849a2b91d
commit
abf0f99246
|
@ -1,21 +1,67 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int no;
|
||||||
|
float juice, alcohool;
|
||||||
|
} Barrel;
|
||||||
|
|
||||||
|
bool readInput(Barrel * line[2], Barrel * reservoir) {
|
||||||
|
int i;
|
||||||
|
float f;
|
||||||
|
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
if (!scanf(" %f", &f) || f <= 0)
|
||||||
|
return false;
|
||||||
|
if (i % 2 == 0) {
|
||||||
|
line[i / 2]->no = i / 2 + 1;
|
||||||
|
line[i / 2]->juice = f;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (f > 1)
|
||||||
|
return false;
|
||||||
|
line[i / 2]->alcohool = f * line[i / 2]->juice;
|
||||||
|
line[i / 2]->juice -= line[i / 2]->alcohool;
|
||||||
|
}
|
||||||
|
reservoir->juice = line[0]->juice + line[1]->juice;
|
||||||
|
reservoir->alcohool = line[0]->alcohool + line[1]->alcohool;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Barrel * sortLine(Barrel * line) {
|
||||||
|
if (line[0].juice + line[0].alcohool > line[1].juice + line[1].alcohool)
|
||||||
|
return line;
|
||||||
|
|
||||||
|
Barrel * sortedLine[2];
|
||||||
|
*sortedLine[0] = *line[1];
|
||||||
|
*sortedLine[1] = *line[0];
|
||||||
|
return sortedLine;
|
||||||
|
}
|
||||||
|
|
||||||
|
int loadBarrel (Barrel * reservoir, Barrel barrel) {
|
||||||
|
float capacity = barrel.juice + barrel.alcohool;
|
||||||
|
if (reservoir->juice - capacity * 0.86 >= 0 &&
|
||||||
|
reservoir->alcohool - capacity * 0.14 >= 0) {
|
||||||
|
reservoir->juice -= capacity * 0.86;
|
||||||
|
reservoir->alcohool -= capacity * 0.14;
|
||||||
|
return barrel.no;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int balancear() {
|
int balancear() {
|
||||||
int i, barrels[4], sortedBarrels[4], reservoir[2], isBigger;
|
int i, result;
|
||||||
|
Barrel line[2], reservoir;
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
if (!readInput(&line, &reservoir))
|
||||||
if (!scanf(" %f", barrels[i]) || barrels[i] <= 0)
|
return EOF;
|
||||||
return -1;
|
|
||||||
|
|
||||||
for (i = 0; i < 1; i++)
|
line = sortLine(line);
|
||||||
reservoir[0] = barrels[0] + barrels[2];
|
|
||||||
|
|
||||||
reservoir[1] = barrels[1] + barrels[3];
|
for (i = 0; i < 2; i++)
|
||||||
|
result += loadBarrel(&reservoir, line[i]);
|
||||||
|
|
||||||
sortedBarrels = sortBarrels(barrels)
|
return result;
|
||||||
isBigger = (barrels[1] == sortedBarrels[1]) ? 1 : 2;
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i += 2) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue