Problem z powtarzającymi się liczbami w vectorze.

0

Napotkałem problem, mianowicie, chciałem do vectora o określonej długości 500001, wpisać tylko liczby nieparzyste. Jednak podczas tego co druga liczba była 0. Po "rozwiązaniu" tego problemu, okazało się że każda liczba wyświetla się podwójnie. Np. 1 1 3 3 5 5 7 7 itd. Chciałem więc sie zapytać, czy jest jakiś algorytm na tą sytuacje.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector <int> liczby (500001);
    ios_base::sync_with_stdio(0);
    for(int i = 1;i<=liczby.size();i++){
        if(i%2!=0){
            liczby[i]=i;}
        else {
            continue;}
    }
    for(int i =1;i<liczby.size()-1;i++){
        if(liczby[i]==0){
            liczby[i]=liczby[i-1];
        }

    for(int i = 1; i<=liczby.size() ;i++){
        cout << liczby[i]<< endl;
    }
    return 0;
}
6

Umiesz czytać kod, który (być moze) napisałeś?
Jak wstawiasz co drugą, to czemu się dziwisz?

a "naprawa błędów w kontenerze" (bo przecież nie własny błąd) to do perełek się nadaje.

2

Chciałem więc sie zapytać, czy jest jakiś algorytm na tą sytuacje.

Tak, jest to algorytm wstawiania do wektora tylko tego, co chcesz tam wstawić. Prześledź krok po kroku - albo na papierze z długopisem albo w debuggerze - co się tam dzieje i dlaczego nie działa tak jak chcesz.

0

@kq No, ale wstawiam tam tylko to co chce. liczby niepodzielne przez 2. Tylko z powodu tego że pomiędzy nimi były liczby które dzieliły się przez 2, pozostawały zera w vectorze, teraz chciałem się zapytać czy jest sposób żeby przenieść te liczby o 1.

0

@pylaochos: to była właśnie ta próba zmiany miejca w vectorze o 1.

0

Ok, a w które miejsca wstawiasz te liczby?

0

W indeksy i

0

A jakie wartości mają te indeksy?

0

Chyba 0, chociaż nie wiem bo deklarowałem w main'ie

0

liczby[i]=i

Chcesz mi powiedzieć, że uważasz, że i po lewej stronie ma wartość zero, a po prawej np. siedem?

0

Nie i ma wartość od 1 do 500001 a liczby w każdym indeksie ma tą samą wartość.

0

Wobec tego w jakie indeksy wstawiasz swoje liczby nieparzyste?

0

Tylko w te nieprzyste.
Dziękuje za wyjaśnienie.

0

@kq: jeszcze jedno pytanie, gdy pisze zrobie takie coś, to i będzie się powiększało o 3 za każdym odtworzeniem pętli, czy źle to rozumiem.

for(int i = 2;i<liczby.size();i+3)
1

Blisko, ale w trzecim wyrażeniu w pętli musisz przypisać do i, inaczej i+3 nie ma efektu

3
KomnatoMan napisał(a):

@kq: jeszcze jedno pytanie, gdy pisze zrobie takie coś, to i będzie się powiększało o 3 za każdym odtworzeniem pętli, czy źle to rozumiem.

for(int i = 2;i<liczby.size();i+3)

To nie brzmi jak przepis na liczby nieparzyste w wektorze, pomijając już brak przypisania tego i+3 do czegokolwiek - rozpisz sobie, jakie wartości będzie mieć Twoje i w kolejnych krokach pętli.

Zastanów się również - zapominając na chwilę o tym, że chcesz coś wpisywać do wektora - w jaki sposób wypisałbyś pierwsze N liczb nieparzystych. Tak po prostu, wiedząc jedynie że ma być ich N, a w i-tym kroku pętli chcesz wypisać i-tą liczbę nieparzystą, a nie i.

0
for(int i=0;i<odd.size();++i) odd[i]=(i<<1)+1;

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