Ir ao conteúdo
  • Cadastre-se

C Ex. UVA Prêmio Ecológico (10300)


Posts recomendados

Boa tarde/noite, gostaria de saber em o que meu código, num dos problemas do UVA Online Judge, estaria dando de errado:

#include <stdio.h>
#include <math.h>

int main() {
	
	int n, f, a, b, c;
	int i, j;
	float c1, c2, premio, tot;
	int I; //charme para o ultimo printf
	
	{ //valores resetados
	c1 = 0;
	c2 = 0;
	premio = 0; 
	tot = 0; }
	
	printf("Casos de teste >> ");
	scanf("%d", &n);
	
	for (i=0;i<n;i++) {
		printf("Numero de fazendeiros >> ");
		scanf("%d", &f);
		printf("\nTamanho da Fazendo | N. Animais | Benef. ao Ambiente\n");
		for (j=0;j<f;j++) {
			scanf("%d %d %d", &a, &b, &c);
			c1 = b / a;		//Espaço que cada animal ocupa
			c2 = c1 * c;		//Espaço animal X benef. ao ambiente
			premio = c2 * b;	//Benef * animal = premio final de um agricultor
			tot += premio;		//Soma total do premio para aquele caso de teste
			I = i + 1;		//charme
	}
	printf("Premio para o caso %d: %.0f\n", I, tot);
}
	return 0;
}

Não há erros na compilação, somente os valores de saída mostrados no UVA não saem iguais, imagino que seja erro matemático.

Agradecido caso haja resposta.  :wiggle:

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Schubert M. Cara!

Não existe pedido no exercício dessas mensagens na Entrada/Saída:


	printf("Casos de teste >> ");


		printf("Numero de fazendeiros >> ");


	printf("Premio para o caso %d: %.0f\n", I, tot);

 

No Final do arquivo p10300.pdf tem exemplos de entrada (Sample Input) e de saída (Sample Output), você deve de fazer da maneira que indicam os exemplos.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Considerar ele aqui traduzido então >>> Prêmio Ecológico (10300).pdf <<<

 

Na entrada ele menciona essas 3 coisas:

 

"A primeira linha da entrada contém um único inteiro positivo n (<20), indicando o número de casos de teste"

11 horas atrás, Schubert M. disse:

        printf("Casos de teste >> ");

        scanf("%d", &n);

 

"Cada caso de teste começa com uma linha que contém um único inteiro f (0 <f <20), o número de agricultores, no caso de teste."

11 horas atrás, Schubert M. disse:

          for (i=0;i<n;i++) {

                   printf("Numero de fazendeiros >> ");

                   scanf("%d", &f);

 

"Esta linha é seguida por três números inteiros positivos para cada agricultor: o tamanho da fazenda em metros quadrados, o número de animais que possui e o valor inteiro que expressa o benefício do agricultor ao ambiente."

11 horas atrás, Schubert M. disse:

          printf("\nTamanho da Fazendo | N. Animais | Benef. ao Ambiente\n");

         for (j=0;j<f;j++) {

                    scanf("%d %d %d", &a, &b, &c);

 

                    c1 = b / a; //Espaço que cada animal ocupa

                    c2 = c1 * c; //Espaço animal X benef. ao ambiente

                    premio = c2 * b; //Benef * animal = premio final de um agricultor

 

                    tot += premio; //Soma total do premio para aquele caso de teste

 

E logo após essas 3 partes, imprimido o que, ao meu ver, deveria sair como um dos 3 ou 4 saídas diferente:

11 horas atrás, Schubert M. disse:

         printf("Premio para o caso %d: %.0f\n", I, tot);

Considerando que o I é somente estética, não influência no código em geral (eu acho).

 

Então @AnsiC e @devair1010 estas 3 partes do código estão erradas? ou não deveria mencionar estas linhas sendo que no problema menciona? ou somente uma interpretação mal feita minha do problema?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu somente verifiquei as mensagens.

11 horas atrás, Schubert M. disse:

printf("Casos de teste >> ");

 

11 horas atrás, Schubert M. disse:

printf("Numero de fazendeiros >> ");

 

11 horas atrás, Schubert M. disse:

printf("\nTamanho da Fazendo | N. Animais | Benef. ao Ambiente\n");

 

11 horas atrás, Schubert M. disse:

printf("Premio para o caso

Todas essas mensagens de texto vão aparecer no aquivo de saída, isso não deve acontecer, a saída deve ser apenas os resultados, sem texto extra.

adicionado 3 minutos depois

conforme Sample Output 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

2 minutos atrás, Schubert M. disse:

botei elas como estética apenas pra visualizar melhor no console de comandos

Você por acaso considera certo?

adicionado 3 minutos depois

Esta é a tradução do Google Tradutor para Output:

Saída
Para cada caso de teste, imprima uma linha contendo um único inteiro que represente o ônus
orçamento de muitos, que será sempre um número inteiro. Não imprima linhas em branco.

Output
For each test case output one line containing a single integer that holds the summed burden for Ger-
many's budget, which will always be a whole number. Do not output any blank lines.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@AnsiC Nem errado, nem certo, somente para eu melhor visualizar. Assim está melhor?

#include <stdio.h>
#include <math.h>

int main() {
	
	int n, f, a, b, c;
	int i, j;
	float c1, c2, premio, tot;
	
	{ //valores resetados
	c1 = 0;
	c2 = 0;
	premio = 0; 
	tot = 0; }
	
	scanf("%d", &n);
	
	for (i=0;i<n;i++) {
		scanf("%d", &f);
		for (j=0;j<f;j++) {
			scanf("%d %d %d", &a, &b, &c);
			c1 = b / a;			//Espaço que cada animal ocupa
			c2 = c1 * c;		//Espaço animal X benef. ao ambiente
			premio = c2 * b;	//Benef * animal = premio final de um agricultor
			tot += premio;		//Soma total do premio para aquele caso de teste
	}
	printf("%.0f", tot);
}
	return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Já havia posto ele traduzido aqui >>> Prêmio Ecológico (10300).pdf

6 minutos atrás, AnsiC disse:

O outro erro se exite e onde existe eu não estou vendo.

@AnsiC O outro erro seria que o exemplo de entrada:

Citação

4
5
1 1 1
2 2 2
3 3 3
2 3 4
8 9 2
3
9 1 8
6 12 1
8 1 1
3
10 30 40
9 8 5
100 1000 70

4
5 6 7
7 6 5
8 9 3
3 10 5

Não resulta no de saída:

Citação

38
86
7445

109

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Depois de um bom tempo, consegui resolver o problema:

#include <stdio.h>

int main() {
	
	int n, f, a, b, c;
	int i, j;
	int total; 
		
	scanf("%d", &n);
	for (i=0; i<n; i++) {
		scanf("%d", &f);
		total = 0;
		for (j=0; j<f; j++) {
			scanf("%d %d %d", &a, &b, &c);
			total += a * c;
		}
		printf("%d\n\n", total);
	}
	return 0;
}

O calculo estava errado, pois seria mais ou menos algo assim:

( ( A / B ) x C ) x B 

Porém no código ele executaria de uma forma errado, sendo que o calculo na realidade, executaria por ordem de prescindência matemática, fazendo com que os dois B se anulassem, ficando somente:

A x C   :aplausos:

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...