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

Zadanie Liczby doskonałe - Dobrze wykonałem? Nie wiem pewnej rzeczy

Object Storage Arubacloud
0 głosów
633 wizyt
pytanie zadane 18 października 2016 w C i C++ przez Tajemniczy Gosc Nowicjusz (120 p.)
edycja 18 października 2016 przez HaKIM

Polecenie wygląda tak :

Napisz program, który pobierze ze standardowego wejścia liczbę naturalną, następnie na standardowym wyjściu napisze czy jest ona liczbą doskonałą czy nie. Program ma wypisać odpowiedź tak lub nie. 
Liczba doskonała - liczba naturalna, która jest sumą wszystkich swych dzielników mniejszych od niej samej. Najmniejszą liczbą doskonałą jest 6, ponieważ 6 = 3 + 2 + 1. 

Podpowiedz:

W zadaniu trzeba wyznaczyć sumę dzielników liczby. Można to zrobić deklarując zmienną s, która będzie przechowywać wartość sumy dzielników. Zmiennej s na początku przypisujmy wartość zero. Ważne jest, by zmienną s zadeklarować i przypisać jej początkową wartość przed pętlą, w której będziemy szukać dzielników. Następnie, gdy znajdziemy kolejny dzielnik, dodajemy go do zmiennej s. Po znalezieniu wszystkich dzielników zmienna s będzie zawierała ich sumę.

Problem:

Czy dobrze wykonałem to zadanie? Czy nie powinienem wyświetlić jeszcze w wyniku, że np. 6=1+2+3? 

 

Mój kod:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int x,s=0,licz=0;
    cin >> x;
    for (int i=1;i<x;i++)
    {
        if (x%i==0)
        {
            s+=i;
            licz++;
        }
    }
    system("cls");
    if (s==x)
    {
        cout << "TAK" << endl;
        cout << s/licz << endl; // Błędna linijka
    }


    else cout << "NIE" << endl;


    return 0;
}

//Kod wstawiamy w odpowiednie dla niego bloki. http://forum.pasja-informatyki.pl/faq

komentarz 18 października 2016 przez HaKIM Szeryf (87,590 p.)

Ktoś zgłosił ten post, choć, IMO on nie podchodzi pod regulamin II.2.G.

zabronione jest proszenie o gotowe rozwiązanie danego zadania/problemu

Jest to bardziej coś w rodzaju upewnienia, czy dobrze się wykonało zadanie, niżeli proszenie o rozwiązanie.

Inna sprawa z II.2.J - Ale nie mam pewności czy owe zadanie pochodzi z tego serwisu, gdyż autor nie podał źródła.

2 odpowiedzi

0 głosów
odpowiedź 18 października 2016 przez Ehlert Ekspert (212,670 p.)
  1. Wiem że być może zaczynasz ale ja bym opakował to do funkcji. Która zwraca typ bool.
  2. Program ma wypisać TAK, lub NIE więc po co Ci drugi cout?
  3. Podpowiedź co do optymalizacji:

Wszystkie liczby naturalne, przez które liczba x jest podzielna bez reszty (z wyjątkiem jej samej) zawierają się w przedziale <1, x/2>. 

0 głosów
odpowiedź 30 września 2021 przez polandonion Mądrala (7,040 p.)
#include<bits/stdc++.h>
using namespace std;
long long dosk(long long y)
{
    if(y==1) return 0;
    long long suma=0;
    //ide do pierwiastka z y, zeby mniej czasu zabieralo
    for(int i=2; i*i<=y; i++)
    {
        if(y%i==0)
        {
            suma+=i;
            if(y/i!=i)
            {
                suma+=y/i;
            }
        }
    }
    return suma+1;
}
 
int main()
{
    long long y;
    cin>>y;
    if(dosk(y)==y) cout<<"TAK\n";
    else cout<<"NIE\n";
}

 

Podobne pytania

0 głosów
1 odpowiedź 330 wizyt
pytanie zadane 5 grudnia 2022 w Python przez dedek2 Początkujący (370 p.)
0 głosów
1 odpowiedź 873 wizyt
0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 12 marca 2022 w C i C++ przez MikolajF2004 Nowicjusz (140 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 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!

...