[C++] Wypisywanie liczb parami

Kamil4037
Użytkownik
Użytkownik
Posty: 10
Rejestracja: 18 gru 2016, o 00:55
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C++] Wypisywanie liczb parami

Post autor: Kamil4037 »

Napisz program, który wczytuje dodatnie liczby całkowite aż do napotkania liczby 0 lub ujemnej
i wypisuje na ekranie wszystkie te dwójki kolejno wczytanych liczb, których suma ma liczbę
dzielników naturalnych większą niż wartość K, będącą liczbą całkowitą podaną przez użytkownika
(końcowa niedodatnia wartość nie jest brana pod uwagę). W przypadku nieznalezienia
odpowiedniej dwójki należy wyprowadzić stosowny komunikat.
Przykład: dla K=2 i kolejnych wartości 1, 2, 3, 4, 7, 0 należy wypisać „Brak szukanych dwójek”;
dla K=2 i kolejnych wartości 6, 7, 5, 5, 4, 7, 0 powinny zostać wypisane dwójki (7, 5), (5, 5), (5, 4).



Czy to zadanie jest trudne czy tylko dla mnie ? Jak nauczyć rozwiązywać takie zadania ?
Ostatnio zmieniony 11 lut 2018, o 22:24 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
mihile
Użytkownik
Użytkownik
Posty: 23
Rejestracja: 16 cze 2015, o 06:07
Płeć: Mężczyzna
Lokalizacja: Warszawa
Pomógł: 4 razy

[C++] Wypisywanie liczb parami

Post autor: mihile »

Kod: Zaznacz cały

#include <assert.h>
#include <iostream>
#include <vector>

using namespace std;

bool Solve(int a, int k)
{
    int n = a;
    int d = 2;
    int r = 1;
    while (n > 1)
    {
        int c = 0;
        while (n % d == 0)
        {
            n /= d;
            c++;
        }
        d++;
        r *= (c + 1);
    }
   
    return r > k;
}

int main()
{
    ios_base::sync_with_stdio(false);

    int n, k;
    cout << "Podaj k: ";
    cin >> k;

    vector<int> in;
    while (true)
    {
        cin >> n;
        if (n <= 0)
            break;
        in.push_back(n);
    }

    assert(in.size() >= 2);

    bool found = false;
    for (int i = 0; i < in.size() - 1; i++)
    {
        if (Solve(in[i] + in[i + 1], k))
        {
            cout << "(" << in[i] << ", " << in[i + 1] << ")
";
            found = true;
        }

        if (i == in.size() - 2 && !found)
            cout << "Brak szukanych dwojek
";
    }

    return 0;
} 
ODPOWIEDZ