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

Doskonałość Liczb C++ - błedny wynik

Object Storage Arubacloud
0 głosów
150 wizyt
pytanie zadane 12 marca 2022 w C i C++ przez MikolajF2004 Nowicjusz (140 p.)

Witam. Mam problem z zadaniem sprawdzającym doskonałość liczb.
Otóż tester zadania dla jednej (niestety mi nieznanej) liczby wyrzuca błąd - zamiast "WIELKA" wyświetlono "NIEDOSTATECZNA". Proszę o pomoc w naprawieniu tego błędu
 

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int dos(int x)
{
    int sum=1;
    for(int i=2; i*i<=x; i++)
    {
        if(x%i==0)
        {
            sum+=i;
            if(x/i!=i)
            {
              sum+=x/i;
            }
        }
    }
    return sum;
}
  
int main()
{
    int n; 
    cin>>n;
    for(int i=0; i<n; i++)
    {
        int x;
        cin>>x;
        int y=dos(x);
        if(y==x) cout<<"OK"<<endl;
        else if(y>x) cout<<"WIELKA"<<endl;
        else cout<<"NIEDOSTATECZNA"<<endl;
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 12 marca 2022 przez Wiciorny Ekspert (270,190 p.)
edycja 12 marca 2022 przez Wiciorny

Twój program zwraca Prawdę- dla 1, natomiast jeden nie jest liczbą doskonałą.
 

która jest sumą wszystkich swych dzielników właściwych (to znaczy od niej mniejszych)

liczba 1, nie ma dzielnika właściwego, gdyż 1 nie jest od niej mniejsze.  
Dodatkowo, program wyświetla WIELKA - dla liczby zero 

W matematyce określenie liczby naturalne oznacza na ogół liczby całkowite dodatnie. To, czy zero jest liczbą naturalną, jest kwestią umowy.

Liczby naturalne - to liczby całkowite, dodatnie: 1, 2, 3, 4, 5, 6, ... Czasami do liczb naturalnych zaliczamy również liczbę zero sprawdź czy to nie dla tego przypadku  

Funkcja dos - > zwraca 1 dla wartości 0, zatem case (y>x) jest prawdziwe i zwarca WIELKA.

1
komentarz 12 marca 2022 przez MikolajF2004 Nowicjusz (140 p.)
Nie tu leży błąd, wartości wpisywane mieszczą się w przedziale 4<=x<=10^9
komentarz 12 marca 2022 przez Wiciorny Ekspert (270,190 p.)

a skąd wiesz, to że takie wartości podane są w zadaniu, nie oznacza że tester nie sprawdza wszystkich zakresów, tylko to jest zakres w którym program ma działać- przynajmniej mówie o tych testerkach z typowych stron programistycznych

<=10^9

z racji ze przedzial jest domkniety, dla wartosci 10^9 program zwraca WIELKA, a powinien niedostateczna, mysle ze jest wiecej bledów  

komentarz 12 marca 2022 przez MikolajF2004 Nowicjusz (140 p.)
A miałbyś jakiś pomysł jak wyeliminować tego rodzaju błędy? Ja jakoś nie mogę zauważyć momentu, w którym program moze cos robić źle.
komentarz 13 marca 2022 przez Wiciorny Ekspert (270,190 p.)
Ciężko powiedzieć, wręcz powiem "zależnie od problemu" czasami jest to po prostu nie osiągalne, aby na 1 etapie wszystko wyśledzić.

Generalnie trzeba rozbić problem, zwrócić uwagę na dokładny opis zadania: czyli
- warunki brzegowe zadania ( jak są to przedziały np. to właśnie maksymalny i minimalny), co uwzględnione a co nie uwzględnione
- np. stwierdzenie JAKIE MAMY LICZBY np. czy zmienno-przecinkowe, czy naturalne, czy inne... bo to jest wskazówka, że coś może nie należy, albo trzeba wykluczyć lub zabezpieczyć program przed złą wartością
- zwracać uwagę co jest oczekiwane, wtedy  przemyśleć "dlaczego może być np oczekiwany rezultat XYZ", i co się z tym łączy, jakie mogą być problemy

Podobne pytania

0 głosów
1 odpowiedź 1,087 wizyt
0 głosów
1 odpowiedź 485 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...