TOPIC

PROBLEM 1309 - URI Fórum 1.0

URI Online Judge asked 7 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Diego Tsuyoshi replied 4 years ago

    100% WA mesmo estando correto para os testes mostrados aqui no fórum.. \=

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    void formata(char string1[], char string2[], char resposta[]);
    
    void main(){
        char centavos[5], dolares[900], resposta[900];
    
        while(scanf("%s %s", dolares, centavos) != EOF){
    
            if(strlen(centavos) == 1){
                centavos[1] = centavos[0];
                centavos[0] = '0';
                centavos[2] = '\0';
            }
    
            formata(dolares, centavos, resposta);
            printf("$%s.%s\n", resposta, centavos);
        }
    }
    
    void formata(char string1[], char string2[], char resposta[]){
        int tamanho = strlen(string1);
        int aux = 1, i, j;
    
        i = tamanho - 1;
        j = i + ceil(i/3);
    
        memset(resposta, 0, strlen(resposta));
        for(; i >= 0; i--){
    
            if(aux > 3){
                aux = 1;
                resposta[j] = ',';
                i++;
            }else
                resposta[j] = string1[i], aux++;
            j--;
        }   
    }
  • Gabriel Alamiro replied 4 years ago

    valeu Mathues Leão era este caso mesmo!!!

  • Matheus Leão replied 4 years ago

    Testei esse caso e seu resultado deu errado [list:sv0ue555]2000000000 0[/list:u:sv0ue555] (2*10^9 e 0)

  • Gabriel Alamiro replied 4 years ago

    cout << ACCEPT << endl;

    ___ :)

  • Matheus Leão replied 5 years ago

    Teste essa entrada:

    1000000000
    0
    100
    1
    20
    1
  • Roger Benet replied 5 years ago

    Código Aceito.

  • Matheus Leão replied 5 years ago

    Teste 0.00. Acho que você pode resolver sem precisar reverter a string, não?

  • anderson luiz replied 5 years ago

    Gostaria de mais casos de teste... O meu esta dando WA, mas não sei por onde =/

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class Main {
    
        public static void reverse(char[] data) {
            int left = 0;
            int right = data.length - 1;
    
            while( left < right ) {
                // swap the values at the left and right indices
                char temp = data[left];
                data[left] = data[right];
                data[right] = temp;
    
                // move the left and right index pointers in toward the center
                left++;
                right--;
            }
        }
    
        public static void main(String[] args) throws NumberFormatException, IOException {
    
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
            //      int n =  Integer.valueOf(in.readLine());
            String dollars = null;
            //      for (int i=0;i<n;i++){
            while((dollars = in.readLine()) != null){
                int cents = Integer.valueOf(in.readLine());
                char[] dollares = dollars.toCharArray();
                reverse(dollares);
    
                int c=0;
                int resto = 0;
                writer.write("$");
                for (int i=dollares.length-1;i>=0;i--){
                    c++;
                    resto++;
                    writer.write(dollares[i]);
                    if (resto==dollares.length%3){
                        writer.write(",");c=0;}
                    else if (c==3 && i!=0){
                        writer.write(",");
                        c=0;
                    }
                }
    
                String cents2 = "." +(cents < 10 ? "0"+Integer.toString(cents) : Integer.toString(cents)); 
                writer.write(cents2);
                writer.newLine();
            }
    
            writer.flush();
        }}
  • Cristhian Bonilha replied 6 years ago

    xogun, infelizmente os casos de teste parecem estar meio inconsistentes. Tente adicionar um trecho de codigo que trate os casos onde tm > 9.

  • xogun replied 6 years ago

    Já tentei aumentar os vetores e nada,, aqui os resultados saem certos, mas esta dando w.a. :

    #include "stdio.h"
    #include "cstring"
    #include "cmath"
    #include "cstdlib"
    
    using namespace std;
    
    int main() {
    
      char al[10], ct[3];
      long long int a, c;
      while(scanf("%lld %lld", &a, &c) != EOF) {
        sprintf(al ,"%lld", a);
        sprintf(ct ,"%lld", c);
    
        if(strlen(ct) == 1) {
          ct[1] = ct[0];
          ct[0] = '0';
          ct[2] = '\0';
        }
        char alv1[4]; memset(alv1, '\0', 4);
        char alv2[4]; memset(alv2, '\0', 4);
        char alv3[4]; memset(alv3, '\0', 4);
    
       int tm = strlen(al);
    
         if(tm > 3 && tm <= 6) {
    
          for (int i = 0; i < (tm-3); i++) {
            alv1[i] = al[i];
          }
    
          for (int i = (tm-3), j=0; i <= (tm-1); i++, j++) {
            alv2[j] = al[i];
          }
    
          printf("$%s,%s.%s\n", alv1,alv2,ct);
    
       } else if(tm > 6) {
    
          for (int i = 0; i < (tm-6); i++) {
            alv1[i] = al[i];
    
          }
    
          for (int i = (tm-6), j=0; i < (tm-3); i++, j++) {
            alv2[j] = al[i];
          }
    
          for (int i = (tm-3), j=0; i <= (tm-1); i++, j++) {
            alv3[j] = al[i];
    
          }
    
          printf("$%s,%s,%s.%s\n", alv1,alv2,alv3,ct);
    
       } else if(tm <= 3) {
    
          for (int i = 0; i < tm; i++) {
    
            alv1[i] = al[i];
          }
    
          printf("$%s.%s\n", alv1,ct);
      }
    
      }
    
    return 0; }
  • Daniel de Souza Vicente replied 6 years ago

    Ola equipe. O meu passou após mudar o tamanho da entrada além do descrito no problema. A saída desse problema poderia ser revista né? É chato receber "Wrong Answer" rsrs Valeu!

  • Cristhian Bonilha replied 6 years ago

    Não sei te dizer. Eu sempre coloco a mais para ter certeza.

  • Matheus Leão replied 6 years ago

    Na descrição do problema fala que o valor em dólares só vai até 2 * 10^8. Esse valor está certo mesmo? Inicialmente, considerei até esse valor e recebi W.A.. Tive que supor um valor maior pra receber accepted.

  • RenatoUern replied 6 years ago

    Obrigado pela dica e pela ajuda, deu certo! :)

  • Cristhian Bonilha replied 6 years ago

    Um caso de teste:

    123
    0

    Sugiro colocar parênteses delimitando qual a prioridade das verificações do if dentro do laço, para que não haja um mal entendedido entre você e o compilador.

  • RenatoUern replied 6 years ago

    #include <iostream>
    
    using namespace std;
    
    int main() {
        string a, b;
    
        while(cin >> a >> b){
            cout << '$';
            for(int i=0; i<a.size(); i++){
                if(a.size()-i==3 || a.size()-i==6 && i!=0){
                    cout << ',';
                }
                cout << a[i];
            }
            cout << '.';
            if(b.size()==1){
                cout << '0' << b[0] << endl;
            } else {
                cout << b[0] << b[1] << endl;
            }
        }
    
    return 0;
    }

    Estou recebendo WA, os casos de teste que eu tentei deu certo. Não encontrei o erro, alguém pode me ajudar?

  • Mateus Faria de Oliveira replied 6 years ago

    Resolveu...

    Muito obrigado!!!

  • Cristhian Bonilha replied 6 years ago

    Estranho.. Bom, aumenta também o do inteiro. Devia ser suficiente, porém não sei em detalhes como o método gets funciona.

  • Mateus Faria de Oliveira replied 6 years ago

    Ainda sem exito...

    aumentei para 4 e continuo recebendo w.a.

    Obrigado!

  • Cristhian Bonilha replied 6 years ago

    O problema está no tamanho do vetor decimal.

    Experimente aumentar para 4.

1 of 2