TOPIC

PROBLEM 1837 - URI Fórum 1.0

URI Online Judge asked 5 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Nícolas Dellazzeri (IFSul Charqueadas) replied 5 years ago

    Gente, o quociente de -7/3 é -2 e o resto de -7/3 é -1. Em qualquer calculadora se acha isso, não entendo pq no enunciado está um resultado diferente.

  • leandro.zatesko.alunos replied 5 years ago

    Olá, sou o autor do problema. Seu programa imprime

    -2 1000

    para a entrada

    -1000 1000

    Claramente esta não pode ser a resposta, já que o resto tem de ser estritamente menor que o valor absoluto do divisor.

    Já que você vai re-escrever seu código, sugiro que tente deixá-lo o mais simples possível. Dica: tente calcular o resto primeiro e depois substitua o resto na equação para obter o quociente. Desafio: tente fazer seu programa sem utilizar um if sequer ;)

  • Sérgio Netto de Araújo Jr replied 4 years ago

    Pessoal, enrosquei no WA 10%...

    Alguma dica? Todos os casos que consegui pegar estão batendo...

    {
        int a,b,q,r;
        scanf("%d %d",&a, &b);
    
        q = a/b;
        r=a-b*q;
        if (r < 0){
            if ( q > 0)
                q ++;
            if(q< 0)
                q --;
            r = a-b*q;
        }
        printf("%d %d\n",q,r);
        return 0;
    }
  • Mathias Mantelli replied 5 years ago

    Leandro Zatesko, na descrição do problema está como -1,000 ≤ a, b < 1,000, e você sugeriu um exemplo com b = 1000. Afinal, quais são os limites das entradas a e b?

  • Taylan B Meurer replied 5 years ago

    ...
    if r < 0:
        r = r-b
        q = (a-r)/b
    
    ...

    Esse é o detalhe da questão.

  • José Ricardo Bettini Pacola replied 4 years ago

    Olá,

    consegui resolver.

    criei uma variável extra para receber o valor do módulo de b. Trabalhei dentro de um laço while analisando a condição euclidiana em que 0 ≤ r < |b| e fui incrementando q que iniciei pelo menor valor possível que é -1000.

  • Samuel Silva replied 4 years ago

    Pessoal esse problema está tirando meu sono.Já testei várias vezes no uDebug e todos passaram. Alguém sabe o que está errado.

    #include <iostream>
    using namespace std;
    int main() 
    {
        int x, y;
        cin >> x >> y;
        int r = 0, q = 0;
        bool y_neg = false;
        if (x < 0)
        {
            if (y < 0)
            {
                y *= -1;
                y_neg = true;
            }
            q = x / y;
            while (x - (y * q) <= 0)
            {
                q--;
            }
            r = x - (y * q);
            if (y_neg)
            {
                q *= -1;
            }
        }
        else
        {
            q = x / y;
            r = x % y;
        }
        cout << q <<" " << r << "\n";
        return 0;
    }
  • Unknown replied 4 years ago

    Como linguagem descendente do C/C++, Java herdou a maioria de seus comandos básicos ( if, for, while, do... while, switch, return etc) e operadores.

    Também tem esse site que fala de operadores básicos em Java, mas é praticamente a mesma coisa.

    Sobre o link da outra mensagem, referi-me à operação "módulo", ou resto da divisão entre dois números inteiros. É feita de forma simples em C/Java através do operador %.

    PS: Executei a tua rotina com o primeiro Exemplo de Entrada, e a resposta divergiu do Exemplo de Saída correspondente.

  • Washington Francis Cabral do Nascimento replied 4 years ago

    Não entendi mano, o meu código está em Java. Dei um lida, mas ainda não identifiquei como o texto pode me ajudar com o problema, testei todas as entradas do uDebug e os valores batem.

  • Unknown replied 4 years ago

    Sugestão de leitura: Operações Matemáticas em C

  • Washington Francis Cabral do Nascimento replied 4 years ago

    Galera, estou travado no WA10% alguém pode me dar uma dica, segue meu código.

    int a = scan.nextInt();
            int b = scan.nextInt();
            int q = 0, r = 0;
    
            for (int rX = 0; rX < Math.abs(b) && (b*q+r) != a; rX++) {
                q = (rX - a)/-b;
            }
    
            r = a - (b * q);
            q = (r - a)/-b; 
    
            pw.printf("%d %d\n", q, r);
    
            scan.close();
  • Unknown replied 4 years ago

    Olá, teste com esta entrada:

    2 -2
  • Mateus Osmarin replied 4 years ago

    Gente, alguém sabe me dizer o que tem de errado? Todos os casos que encontrei deram certo, porém continuo recebendo WA (30%). Fiz meu algoritmo em Python3.

    a, b = [int(x) for x in input().split()]
    
    q = a // b
    if b < 0:
      q += 1
    r = a - b * q
    
    print(q, r)
  • Sérgio Netto de Araújo Jr replied 4 years ago

    Esse está me tirando o sono ;-) Então teoricamente em 10% a resposta está errada. ... Normalmente iria deixar este de lado e partir pra outra, já que não vale a pena insistir por tanto tempo em algo que só vou usar pra este caso específico... Mas pelo tanto de tempo que tentei resolver, se você ou alguém quiser me passar por email com resolve este eu agradeço. s_n_araujo@hotmail.com

  • Unknown replied 4 years ago

    Verdade, mil perdões. Dos 5 casos que eu havia criado e testado, faltou eu fazer upload justamente do que deu diferença com o teu código.

    Seguem uns casos mais simples, que também bugam:

    -1 -2
    -1 2
    -3 -5
  • Sérgio Netto de Araújo Jr replied 4 years ago

    Bateu com seus 4 casos do uDebug.

  • Unknown replied 4 years ago

    Teste com os casos do uDebug.

  • Gabriela da Cunha Januário replied 4 years ago

    Alguém poderia ajudar a identificar o que está errado? Estou recebendo 10%WA

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(void)
    {
       int a,b,q,r,q1;
    
        while(scanf("%d %d",&a,&b)!=EOF){
            if(a == b){
                r = 0;
                q = 1;
                printf("%d %d\n",q,r);
            }
            else{
                if(a >= 0){
                    r = a % b;
                    q = (a - r) / b;
                    if(r < 0){
                        r = r - b;
                        q = (a - r) / b;
                    }
                    printf("%d %d\n",q,r);
                }
                else if(a < 0 && b > 0){
                    if(abs(a) == abs(b)){
                        r = 0;
                        q = -1;
                        printf("%d %d\n",q,r);
                    }
                    else{
                        q1 = a / b;
                        q = q1 - 1;
                        r = a - (q*b);
                        if(r < 0){
                            r = r - b;
                            q = (a - r) / b;
                        }
                        printf("%d %d\n",q,r);
                    }
                }
                else if(a<0 && b<0){
                    if(abs(a)==abs(b)){
                        r = 0;
                        q = 1;
                        printf("%d %d\n",q,r);
                    }
                    else{
                        q1 = a / b;
                        q = q1 + 1;
                        r = a - (q * b);
                        if(r < 0){
                            r = r - b;
                            q = (a - r) / b;
                        }
                        printf("%d %d\n",q,r);
                    }
                }
            }
        }
    
       return 0;
    }
  • Saif Catacutan replied 4 years ago

    Hello!

    Currently, with my code, I am getting WA 20%. I have already tested all of the test cases which was provided for those who have received wrong answer themselves, and have passed on my code.

    May I ask for a test case which proves my code wrong??

    -JAVA-

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            if(x >= 0){
                System.out.println(x/y + " " + x%y);
            }else if(x < 0 && y > 0){
                int fix = x * -1;
                if(fix%y == 0){
                    System.out.println(((fix/y)*-1) + " " + 0);
                }else{
                    System.out.println("-" + ((fix/y) + 1) + " " + (y - (fix%y)));
                }
            }else if(x < 0 && y < 0 && x > y){
                System.out.println("1 " + ((y * -1) - (x * -1)));
            }else if(x < 0 && y < 0 && y >= x){
                System.out.println((((x * -1)/(y * -1)) + 1) + " " + ((y * -1) - ((x * -1)%(y * -1))));
            }
        }
    }
  • [Suicide Squad] Eliu Moraes replied 5 years ago

    Eu tentei para todas as entradas da descrição e deu certo, também tentei várias outras sempre comparando com o toolkit, não sei onde pode estar o erro.

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main(int argc, char const *argv[])
    {
        int a,b,q,r,x;
    
        cin >> a >> b;
    
        if(a>0){
            r = remquo(a,b,&q);
        } else{
            if(a==0){
                r = 0;
                q = 0;
            } else{
                    r = remquo((a-1),b,&q);
                    r = r + 1;
                }
        }
    
        cout << q << " " << r << endl;
        return 0;
    
    }
1 of 3