AdventOfCode Day1/Part 2 – znajdowanie powtarzajacych sie dwukrotnie sumy elementow

2018-12-13 22:38
0

Hej, czy widzicie jakis blad w tym kodzie? Moim zadaniem jest wczytanie ponad 900 elementow z pliku tekstowego, po czym sumuje je po kolei, musze znalezc sume ktora powtarza sie dwukrotnie. Robie wiec freq=0 i dodaje do tej zmiennej kolejne wartosci wektora, przy czym sprawdzam czy taki element juz sie pojawil w wektorze sum. Jesli tak: zwracam szukaną wartość jesli nie dodaje do wektora sum. Kondycje znalazłam na stacku, okazuje sie że set albo wektor nie mają wbudowanej funkcji is_found. Bardzo prosze o jakas wskazowke:

#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>
#include <set>
#include <algorithm>
using namespace std;
#define MAX(p, s) ((p > s) ? p : s)

int twiceSum(const vector<int>& x)
{
    int freq = 0;
    vector<int> v;
    v.push_back(freq);
    for (int i = 0; i < x.size(); i++) {
        freq += x[i];

        bool found = std::find(v.begin(), v.end(), freq) != v.end();
        if (found) {
            /* v contains x */
            return freq;
        }
        else {
            /* v does not contain x */
            v.push_back(freq);
            cout << found << endl;
            //cout << freq << endl;
        }
    }
    return 1;
}

int main()
{

    std::ifstream infile("mtcars.txt");
    std::string line;
    std::vector<int> v;

    while (std::getline(infile, line)) {
        std::istringstream iss(line);
        int n;

        while (iss >> n) {
            v.push_back(n);
        }
    }

    for (int j = 0; j < v.size(); j++) {
        cout << v[j] << endl;
    }
    cout << "ODPOWIEDZ: " << twiceSum(v) << endl;

    return 0;
}

Ponadto dodaje plik tekstowy z jakiego korzystam (kazda liczba jest w linii)

edytowany 4x, ostatnio: lambdadziara, 2018-12-13 22:50
Po co ten std::istringstream i std::getline, skoro możesz od razu czytać liczby ze strumienia infile? - _0x666_ 2018-12-14 10:07

Pozostało 580 znaków

2018-12-13 22:43
kq
0

W tym zadaniu może zajść konieczność wielokrotnego przejścia przez dane wejściowe żeby znaleźć powtarzającą się sumę. Dodatkowo zapoznaj się z kontenerami std::set i std::hash_set


hmm, dlaczego jest taka koniecznosc? przeciez tu nie chodzi o sume wszystkich podzbiorow tylko tylko sume (n1, n1+n2, ..., n1+...+nk) - lambdadziara 2018-12-13 22:54
Dlatego, że sumy mogą się nie powtórzyć przy jednym obiegu. - kq 2018-12-14 00:08

Pozostało 580 znaków

2018-12-13 23:06
0

link do wyzwania jesli ktos chce spr swoich sil
https://adventofcode.com/2018/day/1

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0