• 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

Hosting forpsi easy 1 pln
0 głosów
65 wizyt
pytanie zadane 17 listopada 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 przez j23 Mędrzec (194,340 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 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 przez j23 Mędrzec (194,340 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 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 przez j23 Mędrzec (194,340 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 23,121 wizyt
pytanie zadane 22 kwietnia 2015 w C i C++ przez falauthy Stary wyjadacz (11,550 p.)
0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 26 kwietnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 253 wizyt

92,133 zapytań

140,789 odpowiedzi

317,830 komentarzy

61,457 pasjonatów

Advent of Code 2023

Top 15 użytkowników

  1. 1886p. - Łukasz Eckert
  2. 1856p. - Dawid128
  3. 1844p. - CC PL
  4. 1844p. - Marcin Putra
  5. 1818p. - rafalszastok
  6. 1775p. - Mikbac
  7. 1760p. - rucin93
  8. 1741p. - sefirek
  9. 1682p. - Adrian Wieprzkowicz
  10. 1652p. - Eryk Andrzejewski
  11. 1644p. - jaroslawroszyk
  12. 1565p. - Rafał Trójniak
  13. 1467p. - dia-Chann
  14. 1445p. - nidomika
  15. 1424p. - ssynowiec
Szczegóły i pełne wyniki

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.

Uwaga - w dniach od 02.12 do 08.12 trwają Mikołajki (książki drukowane mają rabat -35%, ebooki do -45%). Zaś dodatkowy, specjalny kod zniżkowy: HELMIKOLAJ-10 dla naszych Widzów zapewni Wam oszczędność -10zł dla zamówień powyżej 70zł! Warto korzystać!

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!

...