1023 - Estiagem
Um problema um pouco estranho, mas bem tranquilo.
Descrição
Solução
Não parece muito claro, mas o objetivo desse problema é contabilizar quantas pessoas têm com o custo médio equivalente a cada valor, ou seja, precisamos agrupar as pessoas pelo consumo médio delas por pessoa na sua casa.
Por exemplo, vamos analisar o segundo caso de teste:
Pessoas
Consumo total
Consumo médio por pessoar
1
25
25
2
20
10
3
31
10
2
40
20
6
70
11
Como resposta, podemos agrupar 5 pessoas com consumo médio 10 (as 2 em uma casa e 3 em outra), 6 pessoas com consumo médio 11, 2 pessoas com consumo médio 20 e 1 com consumo médio 25.
Com isso, podemos usar o consumo médio como índice de um vetor de contagem para somar a quantidade de pessoas para cada consumo médio encontrado. Com valor mínimo de pessoas de 1 e valor máximo de consumo de 200, então o tamanho máximo do vetor é 200.
Para exibir o resultado truncado em duas casas decimais, pode-se fazer uma operação de piso da divisão no resultado da divisão multiplicado por 100 e, após isso, dividir novamente o número por 100.
#include <string.h>
#include <stdio.h>
#include <math.h>
int main()
{
double consumo_medio;
int T, N, X, Y, totalX, totalY, first, consumos[201];
T = 0;
while (scanf("%d", &N))
{
if (!N)
break;
if (T)
printf("\n");
memset(consumos, 0, sizeof(consumos));
totalX = 0, totalY = 0;
for (int i = 0; i < N; ++i)
{
scanf("%d %d", &X, &Y);
totalX += X;
totalY += Y;
consumos[Y / X] += X;
}
printf("Cidade# %d:\n", ++T);
first = 1;
for (int i = 0; i < 201; ++i)
{
if (consumos[i] > 0)
{
if (first)
first = 0;
else
printf(" ");
printf("%d-%d", consumos[i], i);
}
}
consumo_medio = ((100 * totalY) / totalX) / 100.0;
printf("\nConsumo medio: %.2lf m3.\n", consumo_medio);
}
return 0;
}
Last updated
Was this helpful?