• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

spoj JPESEL - Pesel

VPS Starter Arubacloud
0 głosów
290 wizyt
pytanie zadane 1 sierpnia 2022 w Java przez Ada3141592654 Początkujący (270 p.)
Hej,

Czy w tym zadaniu mam użyć Scannera, żeby wczytywać z klawiatury numery pesel? Z zadania wynika, ze moze byc ich 100, więc jest to chyba mało wydajne rozwiązanie. Myślałam jeszcze nad klasą Random, ale nie losowałyby się numery z zerem na początku. Lepiej więc użyć Scannera czy stworzyć własny generator, który ma 10 cyfr i tworzy z nich 11 cyfrowe liczby?

https://pl.spoj.com/problems/JPESEL/

1 odpowiedź

0 głosów
odpowiedź 1 sierpnia 2022 przez Wiciorny Ekspert (269,120 p.)
I tak i nie, często Scanner bedzie dawał błędy w testach - z racji wydajności, więc ostatecznie nie przejdzie.
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html
BufferedReader jest rozwiązaniem albo Buffered Stream

Spokojnie możesz napisać Scannerem a potem sprawdzić czy przejdzie testy.
komentarz 4 sierpnia 2022 przez Ada3141592654 Początkujący (270 p.)
edycja 4 sierpnia 2022 przez Ada3141592654

Ogólnie jednak rozwiązałam to zadanie z generatorem liczb 11 cyfrowych, użyłam BufferedReadera tylko, zeby wczytac liczbe testów. Mam poprawne wyniki lokalnie, ale spoj nie akceptuje mojego rozwiazania. Mógłbyś zerknąć na kod i powiedzieć czego to może być przyczyna?

import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Pesel {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int t = scanner.nextInt();
        for(int c=0; c<t; c++) {
            char[] pes = generatePesel().toCharArray();
            int[] array = new int[pes.length];
            for (int i = 0; i < array.length; i++) {
                array[i] = Integer.parseInt(String.valueOf(pes[i]));
                System.out.print(array[i]);
            }
            System.out.println();
            int sum = 0;
            int sum1 = 0;
            int n = 1;
            int l = 7;
            for (int i = 0; i < 2; i++) {
                for (int j = i; j < array.length; j += 4) {
                    sum += array[j] * n;
                }
                n += 2;
            }
            for (int i = 2; i < 4; i++) {
                for (int j = i; j < 8; j += 4) {
                    sum1 += array[j] * l;
                }
                l += 2;
            }
            int res = array[10] + sum1 + sum;
            if(res>0) {
                if(res%10==0) {
                    System.out.println("D");
                } else {
                    System.out.println("N");
                }
            }
        }
    }
    private static String generatePesel() {
        Random random = new Random();
        List<String> possibleIntegers = List.of("0", "1", "2", "3" , "4", "5", "6", "7", "8", "9");
        StringBuilder pesel = new StringBuilder();
        while(pesel.length()<11) {
            pesel.append(possibleIntegers.get(random.nextInt(possibleIntegers.size())));
        }
        return pesel.toString();
    }
}

 

komentarz 6 sierpnia 2022 przez Ada3141592654 Początkujący (270 p.)
Napisałam to jednak BufferedReaderem i przeszło!

Podobne pytania

0 głosów
1 odpowiedź 649 wizyt
pytanie zadane 25 lipca 2018 w SPOJ przez Deriquest Użytkownik (550 p.)
0 głosów
1 odpowiedź 436 wizyt
pytanie zadane 31 maja 2020 w SPOJ przez Dynamic Bywalec (2,910 p.)
0 głosów
1 odpowiedź 166 wizyt
pytanie zadane 17 sierpnia 2017 w C i C++ przez sohu Nowicjusz (200 p.)

92,452 zapytań

141,262 odpowiedzi

319,074 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...