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>intmain(){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;elseprintf(" ");printf("%d-%d", consumos[i], i); } } consumo_medio = ((100* totalY) / totalX) /100.0;printf("\nConsumo medio: %.2lf m3.\n", consumo_medio); }return0;}