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

Sprawdzanie liczb w vector i zliczenie ich

42 Warsaw Coding Academy
0 głosów
163 wizyt
pytanie zadane 17 listopada 2023 w C i C++ przez Verox2903 Nowicjusz (220 p.)

Witam, potrzebuję z liczb w pliku "liczby.txt" "przechwycić" ich czynniki pierwsze. Jeżeli liczba ma dokładnie trzy różne czynniki z których każdy z nich jest nieparzysty to zwiększam licznik o 1 (zliczam te liczby). Działa przechwycenie tych liczb do vectora ale jak to przesortować w podany wyżej sposób nie mam pomysłu a męczę się już nad tym jakiś czas. Wstawiam dotychczasowy kod poniżej. Z góry dzięki wszystkim za pomoc.

#include <iostream>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    vector <int> liczby;
    string liczba;
    long int liczbaint, dziel=2, licz=0, pom=0;
    ifstream wejscie("liczby.txt");
    while(!wejscie.eof())
    {
        getline(wejscie,liczba);
        liczbaint=stoi(liczba);
        while(liczbaint>1)
        {
            while(liczbaint%dziel==0)
                {
                    liczby.push_back(dziel);
                    liczbaint/=dziel;
                }
            dziel++;
        }
    dziel=2;
    }
    wejscie.close();
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 17 listopada 2023 przez j23 Mędrzec (195,240 p.)
  1. czytasz liczbę
  2. rozbijasz ją na czynniki
  3. jeśli vector zawiera trzy czynniki (metoda liczby.size()), sprawdzasz w pętli, czy są różne i nieparzyste. Jeśli warunki są spełnione, zwiększasz licznik.
  4. czyścisz vectora (liczby.clear())
  5. skok do punktu 1

Liczby z pliku czytasz tak:

   ifstream wejscie("liczby.txt");

    while(wejscie >> liczbaint) {
        // ...
    }

Żadnych getline, stoi, string czy close.

komentarz 17 listopada 2023 przez Verox2903 Nowicjusz (220 p.)
A jak te warunki sprawdzić bo przelecieć pętlą for vectora to nie jest problem. Problemem dla mnie jest ale jak sprawdzić czy ma co najmniej 3 czynniki różne i są nieparzyste na raz?
komentarz 17 listopada 2023 przez j23 Mędrzec (195,240 p.)

No to w końcu ma mieć co najmniej trzy czynniki, czy dokładnie trzy?

Co doszukania to możesz zrobić tak:

  1. szukasz pierwszego czynnika nieparzystego
  2. szukasz następnego nieparzystego
  3. porównujesz z poprzednim.
  4. jeśli są różne zwiększasz licznik
  5. sprawdzasz, czy licznik jest równy 3
  6. jeśli jest, liczba spełnia kryteria
  7. jeśli nie, skok do 2.

Najlepiej dać to do innej funkcji.

komentarz 17 listopada 2023 przez Verox2903 Nowicjusz (220 p.)

Coś takiego wymyśliłem ale nie działa jak powinno. Chciałem najpierw do nowego vectora zapisać tylko liczby nieparzyste - to działa, tylko nie działa sprawdzenie czy są przynajmniej trzy różne od siebie.

bool sprawdzenie(vector <int> liczby1)
{
    vector <int> nieparzyste;
    int licznik=0, licz=0, pom=0;
    for(int i=0;i<liczby1.size();i++)
    {
        if(liczby1[i]%2!=0)
        {
            nieparzyste.push_back(liczby1[i]);
        }
    }
    if(nieparzyste.size()>=3)
        {
            pom=nieparzyste[0];
            for(int i=0;i<nieparzyste.size();i++)
            {
                if(pom!=nieparzyste[i+1])
                {
                    pom=nieparzyste[i+1];
                    licznik++;
                }
            }
        }
}

 

komentarz 18 listopada 2023 przez j23 Mędrzec (195,240 p.)

Twoja funkcja nie zwraca żadnej wartości, a powinna.

Spróbuj tak:

bool sprawdzenie(const std::vector<int> &liczby) 
{
    std::vector <int> nieparzyste;

    for (int v : liczby) {
        if (v % 2 != 0) {
            nieparzyste.push_back(v);
        }
    }

    if (nieparzyste.size() >= 3) {
        int pom = nieparzyste[0];
        int licznik = 0;
        
        for (int i = 1; i < nieparzyste.size(); i++) {
            if (pom != nieparzyste[i]) {
                pom = nieparzyste[i];
                ++licznik;
                if(licznik == 3) return true;
            }
        }
    }
    
    return false;
}

 

Podobne pytania

0 głosów
3 odpowiedzi 24,455 wizyt
pytanie zadane 22 kwietnia 2015 w C i C++ przez falauthy Stary wyjadacz (11,550 p.)
0 głosów
1 odpowiedź 212 wizyt
pytanie zadane 26 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 594 wizyt

93,381 zapytań

142,381 odpowiedzi

322,537 komentarzy

62,738 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...