TOPIC

PROBLEM 1898 - URI Fórum 1.0

URI Online Judge asked 4 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Leonardo Fernandes replied 4 years ago

    Olá,

    Alguém conseguiu resolver este problema em Python 3? Acredito que alguma entrada deve ter caracteres com alguma codificação estranha. Estou recebendo runtime error neste formato:

    Traceback (most recent call last): File "Main.py", line 1, in s1 = input() File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xa8 in position 12: ordinal not in range(128) Command exited with non-zero status (1)

    Obrigado, Leonardo.

  • Unknown replied 3 years ago

    Atenção, o enunciado diz que a entrada tem no máximo um ponto "." mas na realidade, podem ter mais. Quando aparecer o segundo ponto, vc deve ignorar o resto da linha. Isso resolve os 10%WA.

  • Marcos Eduardo Oliveira Pontes replied 4 years ago

    I need more information about the maximum/minimum number. Do I have do make error check if user type less than minimum of ID numbers?? I got 10% error, and even the description saying that the maximum number have to be 17, the Judge code run if this number is greater, but doesn't work with <11 (It do not have to be greater than 11, according to the description). I know my code doesn't work as the judge with 17+ but work fine with everything else, so according the description it should be 100%.

  • Shakib Haris replied 2 years ago

    Hi, I'm getting 10% WA and cannot find the problem. Please help.

    /*
              Author            : Shakib Haris          
              Starting Date     : 25 Jan, 2017   
              Problem           : Kickback Sum         
              Reference         : URI 1898
    */
    
    using System;
    
    class Program {
        private static string getDouble (string line) {
            string num = "";
            bool dot = false;
            foreach (char c in line) {
                if (c >= '0' && c <= '9')
                    num += c;
                else if (c == '.') {
                    if (!dot) {
                        num += c;
                        dot = true;
                    }
                    else
                        break;
                }
            }
            return num;
        }
    
        private static string getDoubleAfter2Decimal (string line) {
            if (line .Contains (".")) {
                int idx = line .IndexOf ('.') + 1;
                string num = line. Substring (0, idx);
    
                if (idx < line .Length)
                    num += line[idx++];
                if (idx < line .Length)
                    num += line[idx];
    
                return num;
            }
            else 
                return line;
        }
    
        public static void Main (string[] args) {
            string num = getDouble (Console .ReadLine ( ));
            Console .WriteLine ("cpf {0}", num .Substring (0, 11));
    
            double sum = double .Parse (getDoubleAfter2Decimal (num .Substring (11)));
            sum += double .Parse (getDoubleAfter2Decimal (getDouble (Console .ReadLine ( ))));
            Console .WriteLine ("{0:0.00}", sum);
        }
    }
  • Unknown replied 3 years ago

    Estou recebendo W.A. (10%) Alguém pode ajudar? Já verifiquei se há mais do que um ponto e ignorei os números depois da segunda casa decimal.

    # -*- coding: utf-8 -*-
    
    s1 = str(raw_input()) #Primeira linha
    s2 = str(raw_input()) #Segunda linha
    
    x = ''
    y = ''
    
    ponto = -1 #Variavel auxiliar que indica se ja passou por um ponto
    
    for i in s1:
        if i in '1234567890.': #Verifica caracteres validos
            if ponto >= 0:
                ponto += 1 #Conta quantos numeros ha depois da virgula
    
            if len(x) >= 11 and i == '.':
                if ponto >= 0: #Se houver um segundo ponto, o ignora
                    continue
                ponto = 0
    
            if ponto <= 2: #Ignora os algarismos depois da segunda casa decimal
                x += i
    
    ponto = -1
    
    #Funcionamento identico ao loop anterior
    for i in s2:
        if i in '1234567890.':
            if ponto >= 0:
                ponto += 1
    
            if i == '.':
                if ponto >= 0:
                    continue            
                ponto = 0
    
            if ponto <= 2:
                y += i
    
    #CPF --> 11 primeiros caracteres
    cpf = x[:11]
    
    if x[11:] == '': #Verifica se o valor nao e vazio
        x2 = 0.0
    else:
        x2 = float(x[11:])
    
    if y == '' or y == '.': #Verifica se o valor nao e vazio
        y2 = 0.0
    else:
        y2 = float(y)
    
    valor = x2 + y2
    
    print "cpf %d" % int(cpf)
    print "%.2f" % valor
  • Railton Amorim replied 3 years ago

    Alguém pode me ajudar, onde está o erro no meu código esta dando 30% de erro.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    int main (){
        int tam, cont = 0, i, j = 0, l, o = 0;
        char cpf[15], dolar[100], vet[100], cen1[4], cen2[4], num1[100], num2[100];
        double valor1, valor2;
    
        scanf(" %100[^\n]", &vet);
        tam = strlen (vet);
    
        for (i = 0; i <= tam; i++ ){
            if (isdigit (vet [i]) && o == 0){
                num1 [cont] = vet[i];
                cont ++;
            }
    
            else{
                if (vet [i] == '.' && o == 0){
                    for (l = i; j < 3; l++){
                        if (vet [l] == '.' && o == 0){
                            cen1 [j] = vet [l];
                            j++;
                            o = 1;
                        }
    
                        else{
                            if(isdigit (vet [l])){
                                cen1 [j] = vet [l];
                                j++;
                            }
    
                            else{
                                if (vet [l] == '.' && o != 0){
                                    break;
                                }
                            }
                        }
                    }
                }
            }
    
            if (vet [i] == '.' && o != 0){
                break;
            }
        }
    
        scanf(" %100[^\n]", &vet);
        tam = strlen (vet);
    
        cont = j = o = 0;
    
        for (i = 0; i <= tam; i++ ){
            if (isdigit (vet [i]) && o == 0){
                num2 [cont] = vet [i];
                cont++;
            }
    
            else{
                if (vet [i] == '.' && o == 0){
                    for (l = i; j < 3; l++){
                        if (vet [l] == '.' && o == 0){
                            cen2 [j] = vet [l];
                            j++;
                            o = 1;
                        }
    
                        else{
                            if(isdigit (vet [l])){
                                cen2 [j] = vet [l];
                                j++;
                            }
    
                            else{
                                if (vet [l] == '.' && o != 0){
                                    break;
                                }
                            }
                        }
                    }
                }
    
                if (vet[i] == '.' && o != 0){
                    break;
                }
            }
        }
    
        tam = strlen (num1);
        cont = 0;
    
        for(i = 0; i <= tam; i ++){
            if (i < 11){
                cpf [i] = num1 [i];
            }
    
            else{
                dolar [cont] = num1 [i];
                cont++;
            }
        }
    
        printf ("cpf ");
        for (i = 0; i < 11; i++){
            printf ("%c", cpf [i]);
        }
        printf ("\n");
    
        strcat (dolar, cen1);
        strcat (num2, cen2);
    
        valor1 = strtod (dolar, NULL);
        valor2 = strtod (num2, NULL);
    
        printf("%.2lf\n", valor1 + valor2);
    
        return 0;
    }

    Copiei o código fiz algumas modificações mas está dando 30% de erro, se puderem me ajudar desde já grato.

  • Unknown replied 3 years ago

    Galera, estou levando W.A. (40%) mas já me esgotei de diffar os resultados com o toolkit até agora nenhuma esperança... Alguem poderia me ajudar?

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    int main() {
        unsigned short int count,c,d, ponto;
      char cpf[12], string[60], *numero, *numero2;
        double num1, num2;
        cpf[11] = '\0';
        scanf("%s", string);
        numero = (char*) calloc(1,61);
        numero2 = (char*) calloc(1,61);
        for(count=0,d=0;count<11;d++) // laco do cpf
            if(isdigit(string[d]))
                cpf[count++] = string[d];
        // c == numero de casas apos o primeiro pontoo
        for(count=0,c=0, ponto=0; string[d]!='\0';d++) // laco do num1
        {
            if(isdigit(string[d])){
                numero[count++] = string[d];
                if(ponto){ // Se ja achou um pontoo
                    c++;
                    if(c==2) // Se ja leu 2 casas apos a virgula
                        break;
                }
            }
            else if(string[d]=='.' && !ponto){ // Se eh o 1o. ponto
                numero[count++] = string[d]; // Adiciona o ponto na str
                ponto = !ponto;
            }
    
        }
        memset(string,0,sizeof(string));//limpando a string
        scanf("%s", string); // Lendo a 2a. linha
        for(count=0,d=0,ponto=0, c=0; string[d]!='\0'; d++) // laco do num2
        {
            if(isdigit(string[d])){
                numero2[count++] = string[d];
                if(ponto){
                    c++;
                    if(c==2)
                        break;
                }
            }
            else if(string[d]=='.' && ponto==0){
                numero2[count++] = string[d];
                ponto = !ponto;
            }
        }
        sscanf(numero, "%lf", &num1); //Convertendo as str para double
        sscanf(numero2, "%lf", &num2);
        printf("cpf %s\n%.2lf\n", cpf, num1+num2);
        free(numero);
        free(numero2);
        numero = NULL;
        numero2 = NULL;
        return 0;
    }

    Grato! ^-^

  • Unknown replied 3 years ago

    Cara, não sei se sou a melhor pesso para te responder, visto que meu alg está no momento com W.A (40%), mas acho que você interpretou errado o exercício, lá fala: "Apenas tome o cuidado de separar da soma os primeiros 11 dígitos do primeiro valor. Eles correspondem ao CPF do corrupto :)". Ou seja, os primeiros 11 caractéres numéricos da primeira linha são o cpf.

  • João Henrique Damazio replied 3 years ago

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <stdlib.h>
    
    #define MAX 1000
    
    int main ()
    {
    
    long int i , cl ,cont = 0, l , j = 0, o = 0;
    char cpf[12],dolar[MAX],ori[MAX],cen[4],cen1[4],num[MAX],num1[MAX];
    double valor1,valor2;
    
        scanf("%s",ori);
        cl = strlen (ori);
    
        for (i = 0 ; i <= cl ; i++ )
        {
    
            if (isdigit (ori[i]) && o == 0)
            {
    
                num[cont] = ori[i];
                cont ++ ;
    
            }
    
            else if (ori[i] == '.' && o == 0)
            {
    
                for (l = i ; j < 3 ;l++)
                {
    
                    if (ori[l] == '.' && o == 0)
                    {
    
                        cen[j]  =   ori[l];
                        j++;
                        o = 1;
    
                    }
    
                    else if(isdigit(ori[l]))
                    {
    
                        cen[j] = ori[l];
                        j++;
    
                    }
    
                    else if (ori[l] == '.' && o != 0)
                    {
                        break;
                    }
    
                }
            }
    
            else if (ori[i] == '.' && o != 0)
            {
                break;
            }
    
        }
    
        scanf("%s",ori);
        cl = strlen (ori);
    
        cont = j = o = 0;
    
        for (i = 0 ; i <= cl ; i++ )
        {
            if (isdigit (ori[i]) && o == 0)
            {
    
                num1[cont] = ori[i];
                cont ++ ;
    
            }
    
            else if (ori[i] == '.' && o == 0)
            {
    
                for (l = i ; j < 3 ;l++)
                {
    
                    if (ori[l] == '.' && o == 0)
                    {
    
                        cen1[j]  =   ori[l];
                        j++;
                        o = 1;
                    }
    
                    else if(isdigit(ori[l]))
                    {
                        cen1[j] = ori[l];
                        j++;
                    }
    
                    else if (ori[l] == '.' && o != 0)
                    {
                        break;
                    }
    
                }
            }
    
            else if (ori[i] == '.' && o != 0)
            {
                break;
            }
    
        }
    
        cl   = strlen (num);
        cont = 0;
    
        for(i = 0 ; i <= cl ; i ++)
        {
            if (i < 11)
            {
                cpf[i] = num[i];
            }
            else
            {
                dolar[cont] = num[i];
                cont++;
            }
    
        }
    
        printf("cpf ");
        puts(cpf);
    
            strcat (dolar,cen);
            strcat (num1,cen1);
    
        valor1 = strtod (dolar , NULL);
        valor2 = strtod (num1  , NULL);
    
        printf("%.2lf\n", valor1 + valor2 );
    
    return 0;
    }

    dá 10% WA , por que ?

  • Unknown replied 3 years ago

    Alguém poderia me ajudar no meu código. Já testei todos os casos possíveis e sempre roda. No entanto, o URI deu 10% de erro. My code got 10% W.A. . Please help me to find the error.

    Resolvido
  • Gustavo Vilar de Farias replied 4 years ago

    c=input()
    b=input()
    a=[]
    d=''
    s=''
    k=0
    
    for i in range(len(c)):
        if k<11:    
            if c[i]=='0' or c[i]=='1' or c[i]=='2' or c[i]=='3' or c[i]=='4' or c[i]=='5' or c[i]=='6' or c[i]=='7' or c[i]=='8' or c[i]=='9':
                k+=1
                a.append(int(c[i]))
        else:
            if c[i]=='0' or c[i]=='1' or c[i]=='2' or c[i]=='3' or c[i]=='4' or c[i]=='5' or c[i]=='6' or c[i]=='7' or c[i]=='8' or c[i]=='9' or c[i]=='.':
                d=d+str(c[i])
    
    print("cpf ",end='')
    
    for i in range(len(a)):
        print(a[i],end='')
    
    print()
    
    d=float(d)
    d=int(d*100)
    d=float(d/100)
    
    for i in range(len(b)):
        if b[i]=='0' or b[i]=='1' or b[i]=='2' or b[i]=='3' or b[i]=='4' or b[i]=='5' or b[i]=='6' or b[i]=='7' or b[i]=='8' or b[i]=='9' or b[i]=='.':
            s=s+str(b[i])
    
    s=float(s)
    s=int(s*100)
    s=float(s/100)
    print("%.2f"%(s+d))

    Porque estou levando Runtime error