This repository has been archived by the owner on Jul 17, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExercicio1(facil).c
69 lines (54 loc) · 1.57 KB
/
Exercicio1(facil).c
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <math.h>
int arredonda (float x) {
float i;
i = x - floor(x);
if (i >= 0.5)
return ceil(x);
else
return floor(x);
}
int calculoDistancia (float comprado, float maximo) { // Fórmula adquirida após o modelar matematicamente a questão
return arredonda((float)(comprado / maximo) * 2 ) + 1;
}
int entrega (int quantidade, int distancia) {
return quantidade - distancia;
}
int calculoDeposito (int distancia,int maximo, int total) {
if(total <= maximo){
return total - distancia;
}
else {
return maximo - 2*distancia;
}
}
int teste (int total, int distancia, int hectometro, int maximo, int deposito) { /* Função recursiva caso seja necessário calcular mais
de uma vez a distância */
if (hectometro >= total)
return 0;
distancia = calculoDistancia(total,maximo);
while (total > 0) {
deposito = deposito + calculoDeposito(distancia,maximo,total);
if (total > maximo)
total = total - maximo;
else
total = 0;
}
if (deposito <= maximo && hectometro - distancia < deposito)
return entrega(deposito,hectometro - distancia);
else
return teste(deposito,distancia,hectometro-distancia,maximo,0);
}
int main (void) {
int total, maximo, hectometro, final;
printf("Digite o total de produtos comprados, a distancia em hectometros e o maximo carregado pelo carrinho em ordem!\n");
scanf("%d %d %d",&total,&hectometro,&maximo);
if(total < 10 || maximo > 100000000)
return 0;
final = teste(total,0,hectometro,maximo,0);
if (final == 0)
printf("impossivel\n");
else
printf("%d",final);
return 0;
}