TOPIC

PROBLEM 1154 - URI Fórum 1.0

URI Online Judge asked 8 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Unknown replied 4 years ago

    [size=85:2t6ns7ut]Link relevante: Operadores - Divisão inteira e divisão real[/size:2t6ns7ut]

  • Helmuth replied 4 years ago

    float media; int total=0,n=0,valor;

    scanf("%d",&valor);
    while(valor>0){
        total +=valor;
        n++;
        scanf("%d",&valor);
    }
    
    media = total/n;
    
    printf("%.2f\n",media);

    por que dá 39.00?

  • Gustavo Marini replied 4 years ago

    Nesse problema você realmente não precisa usar o vetor data para armazenar os valores. Apenas lendo eles com EOF e verificando se eles são positivos basta. Mais ou menos assim:

    while((cin >> age)){
        if(age < 0) break;
        sum += age;
        i++;
    }

    E lembre-se de zerar os contadores.

    MOD
  • fernando minamissawa fernandes lopes replied 4 years ago

    To recebendo 100% WRONG ANSWER, porem meu codigo passou em todos os testes que fiz. Alguem pode me passar um teste onde meu codigo nao funcione. Obrigado

    #include <iostream>
    #include <iomanip>
    #include <vector>
    using namespace std;
    
    int main()
    {
    
        vector<unsigned int> data;
        unsigned int age, sum;
        double media;
    
        while((cin >> age))
            data.push_back(age);
    
        sum = 0;
        int i = 0;
        for(; i < data.size(); i++){
            if(data[i] == 0)
                break;
            sum += data[i]; 
        }
    
        media = ((double) sum) / i;
        cout << fixed << setprecision(2) << ( media ) << endl;
    
        return 0;
    }
  • Gustavo Marini replied 4 years ago

    Essa é um questão de entrada EOF. Para realizar ela em C, troque o seu laço:

    for(x;x>0;i++){
        scanf("%d",&x);
        if(x>0){
            m+=x;
        }
    }

    por:

    while(scanf("%d",&x)!=EOF && x>=0){
        if(x<0) break;
        m+=x;
        i++;
    }

    Dessa forma você está lendo uma quantidade ilimitada de valores enquanto eles são maiores ou iguais a zero. O break vai fazer ele parar o laço quando o valor digitado for negativo, e depois é só fazer a média tranquilo como você já fez. (Obs.: pode tirar o i-- de fora do laço).

    MOD
  • Gustavo Marini replied 4 years ago

    Troque as linhas:

    while(n>=0){
        scanf("%d",&n);

    por:

    while(scanf("%d",&n)!=EOF && n>=0)

    O EOF significa "fim de arquivo", então basicamente você vai ler a variável 'n' até ela ser negativa.

    Outra troca é na declaração da variável "med", ela deve ser double e não float, o UOJ trabalha melhor com ela. Isso é o que precisa ser corrigido no seu código.

    MOD
  • Thiago Muniz replied 4 years ago

    #include <stdio.h>
    
    int main(){
        int n,i,count=0;
        float med=0;
        while(n>=0){
                scanf("%d",&n);
                if(n<0)break;
                med = (n+med);
                count++;
                }
        printf("%.2f\n",(med/count));
    
    return 0;
    }

    reenviando..

  • Thiago Muniz replied 4 years ago

    include

    int main(){ int n,count=0; float med; while(n>=0){ scanf("%d",&n); if(n<0)break; med = (n+med); count++; } printf("%.2f\n",(med/count));

    return 0; }

    Ta dando 100% wrong answer. Pq?

  • Enzo Vaghetti replied 5 years ago

    Quando você declarou a variavel i tu esqueceu de zera-la, faz isso aqui:

    float i=0;
  • Harrison replied 5 years ago

    O QUE TEM DE ERRADO ? A SAIDA ESTA CERTA

    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main ()
    {
        int idade, soma = 0;
        float i  ;
        float media;
    
        while (cin >> idade)
        {
    
            if (idade < 0)
            {
                break;
            }
    
            soma = soma + idade;
            i++;
    
        }
        media = soma / i;
        cout << fixed << setprecision(2);
        cout << media << endl;
    
        return 0;
    }
  • Terence Marinho replied 5 years ago

    zennom, seu programa não consegue entrar no loop para continuar a execução, haja vista a condição de entrada ser N > 0, mas N ter sido inicializado com 0.

    MOD
  • Viviane de Lima replied 5 years ago

    #include <stdio.h>
    
    main ()
    {
            int N = 0,CONTADOR=0,CONTADOR2=0,SOMA = 0;
            double MEDIA;
    
             while (N > 0)
    
             {
    
                    scanf ("%d", & N);
    
                    CONTADOR++;
    
                    if (N > 0)
                    {
    
                    CONTADOR2++;
    
                }
    
             }
    
            SOMA = CONTADOR2+N; 
            MEDIA = SOMA/CONTADOR2;
            printf ("%.2lf\n",MEDIA);
    
             return 0;
        }

    meu código nem sequer está compilando no DEVC++ , alguem sabe o motivo?

  • Terence Marinho replied 5 years ago

    O enunciado diz que a entrada será encerrada quando um valor negativo for lido, então seu while precisa aceitar o zero como entrada (idade >= 0).

    MOD
  • Guilherme Alexandre replied 5 years ago

    Deixei dessa forma o resultado da certo porem continua dando Wrong

    int i, idade; double media=0;

    do { scanf("%d", &idade); if(idade > 0) { media=media + idade; i++; } }while(idade > 0);

    media =media / i; printf("%.2f\n", media);

  • Terence Marinho replied 5 years ago

    Boa tarde! Seu laço for está bagunçado, o programa nem sequer entra nele, reveja sua lógica para esse laço.

    MOD
  • Guilherme Alexandre replied 5 years ago

    Alguem pode me ajudar ? qual problema desse codigo ..

    int i, idade=0; double media=0; for(i = 0; idade > 0; i++) { scanf("%d", &idade); media=media + idade; } media =(double)media / i; printf("%.2f\n", media);

  • Terence Marinho replied 5 years ago

    Boa tarde! Seu programa não roda porque você atribuiu à variável a o valor zero, e ele só entra no loop while com a condição a > 0.

    MOD
  • José Pedreira Neto replied 5 years ago

    Alguém tem uma luz??

    #include <stdio.h>
    int main()
    {
      int a=0, soma = 0, cont = 0;
      float media;
    
        while(a > 0){
          soma += a;
          scanf("%d",&cont);
          cont++;
      }
      media = soma/cont;
      printf("%.2f\n", media);
      return 0;
    }
  • Alex José Silva replied 5 years ago

    Solução do problema esta em ler todos os valores como float mesmo sabendo que os valores lidos no problema deveriam ser inteiros.

  • Alaa Zaid replied 5 years ago

    Change this (int num,total=0,soma=0;) to (float num,total=0,soma=0;). and (scanf("%i",&num);) to (scanf("%f",&num);)

    and look at this again : soma=+num; is this right ? :D

    it should be like this :

    soma += num;

    Don't you agree with me ? :)

1 of 4