Problem(znowu) z zadaniem dla początkujących

0

Tym razem problem leży w tym że po prostu nie mam pojęcia co jest nie tak, wszystkie błędy jakie zgłaszał program zdołałem rozwiązać ale czemu to nie działa tak jak powinno to nie wiem. Kod dotyczy zadania o tej treści

Bajtek posiada n monet. Każda z monet jest o nominale 1 Bajtalara i posiada dwie strony: awers i rewers. Bajtek ma rozłożone monety na stole i zastanawia się ile minimalnie monet musi przewrócić na druga stronę, aby wszystkie monety leżały na awersie lub wszystkie leżały na rewersie.

Wejście
Pierwszy wiersz wejścia zawiera jedną liczbę całkowitą , oznaczająca liczbę monet Bajtka. Kolejny wiersz zawiera ciąg liczb całkowitych , gdzie oznacza opis -tej monety, 0 - jeśli moneta leży na awersie, 1 - jeśli moneta leży na rewersie.

Wyjście
Pierwszy i jedyny wiersz wyjścia powinien zawierać jedną liczbę całkowitą równą minimalnej liczbie monet, jakie Bajtek powinien obrócić na drugą stronę.

Przykład
Dla danych wejściowych:

6
1 0 1 1 1 0
poprawną odpowiedzią jest:

2

Mój kod natomiast wygląda tak, zawsze daje wartość zero.

#include <iostream>

using namespace std;
int odp;
int Lmonet;
int main()
{
    cin >> Lmonet;
    int monety[Lmonet];
    cin >> monety[Lmonet];

    for(int i=0;i<=Lmonet;i++){
        if(monety[i]=0)
            odp +=1;
    }
    cout << odp;
    return 0;
}
0

Dziękuje @AnyKtokolwiek , a czy uważasz, że ten kod ma ręce i nogi czy mógłbym coś poprawić?

0
KomnatoMan napisał(a):

Dziękuje @AnyKtokolwiek , a czy uważasz, że ten kod ma ręce i nogi czy mógłbym coś poprawić?

co drugą linijkę.

0

co drugą linijkę.

Mógłbyś wypunktować?

======================================

obraz_2021-01-09_143948.png

Sprawdziłem jak się zachowuje zmienna "odp". Z jakiegoś powodu tylko niektóre "0" zalicza jako "0".

2
  1. Unikaj zmiennych globalnych, możesz je zrobic w funkcji main ale pamiętaj żeby zmienić ich wartości jeśli jest to konieczne
int Lmonet, odp = 0;
  1. Zamiast tablic lepiej używać std::vector, dzięki temu nie musisz się martwić o wycieki pamięci
    cin >> Lmonet;
    int monety[Lmonet];

Źle deklarujesz tablice dynamiczną, w ten sposób deklarujemy tablice stała np:

int tab_stala[100];
const int JAKAS_STALA_WARTOSC = 100;
int tab_stala2[JAKAS_STALA_WARTOSC];

Ale jak już wspominałem lepiej używaj std::vector i zapomnij o problemach ;)
4.

cin >> monety[Lmonet];

To wczyta tylko komórke o indeksie Lmonet, w zadaniu masz wczytać Lmonet razy, więc przydałaby się jakaś pętla która wczyta ci cała tablicę
5. zmienna Odp reaguje w prawidłowy spoósb po prostu cała twoja tablica to są jakieś śmieci a nie to co wpiszesz

0

Czy taka tablica jest dobra?

long monety = new monety[Lmonet];
0

Czyli tak to powinno wyglądać?

#include <iostream>
#include <vector>
using namespace std;
int main()
{
int odp=0;
long Lmonet;
cin >> Lmonet;
std::vector<long> monety (Lmonet);
cin >> monety[Lmonet];

    for(int i=0;i<Lmonet;i++){
        if(monety[i]==0){
            odp +=1;}
    }
    cout << odp;
    return 0;
}
0

Tyle że program poda te wartości w taki sposób. Chce od razu zapełnić cały vector

6
1 0 1 1 1 0

0

Taką?

for(int i=0;i<=Lmonet;i++){
        cin >> monety[i];
    }
0

Dobrze, ale jak mam wywołać vectror

cout << monety[]

jeśli nic nie ma między "[]", bo jak tam coś wpisze to pokaże się tylko jeden indeks(chyba)

2

Nie potrzebujesz w ogóle żadnego vectora.

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
	int back = 0, front = 0, count = 0;
	cin >> count;
	for (int coin = 0; count --> 0 && cin >> coin;) {
		(coin? back : front) += 1;
	}
	cout << min(back, front);
	return 0;
}

https://ideone.com/qCStcC

0

Można to zrobić prościej i czytelniej

#include <iostream>
using namespace std;

int main() {
    int num_of_coins, act_coin,  count_0 = 0;
    cin >> num_of_coins;
    for (int i = 0; i < num_of_coins; i++){
        cin >> act_coin;
        count_0 += (int)(act_coin == 0);
    }
    cout << min(count_0, num_of_coins - count_0) << "\n";
    return 0;
}
0

Dlaczego wyskakuje mi błąd "no match for operator>>" w tej liniijce. dzień to wektor, którego próbuje uzupełnić w pętli.

cin >> dzien[i];
0

I jakbym ktoś chciał to treść zadania.

Kozik postanowił się odchudzić. Jest po dniach diety i intensywnego treningu, jednak waga nie spadała mu równomiernie, a czasem nawet (ku zdziwieniu Kozika) zwiększała się.

Kozik codziennie zapisywał swoją wagę i teraz chce się pochwalić kolegom, więc wybierze taki fragment swojego dzienniczka, w którym schudł najbardziej. Znajdź ten fragment i policz, ile w nim schudł (czyli oblicz maksymalny spadek wagi Kozika).

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    long waga;
    int naj;
    std::vector <long> dzien[waga];

    for(int i = 0;i<dzien[waga].size();i++){
        cin >> dzien[i];
    }


    for(int i = 0;i<dzien[waga].size();i++){
        if(dzien[i]>dzien[i+1])
            naj=dzien[i]-dzien[i+1];
    }
    cout << naj;
    return 0;
}
0
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    long waga;
    int naj;
    vector <long> dzien[waga];

    for(int i = 0;i<dzien.size();i++){     ///tytaj jest błąd "request for member size in dzien, which is non-class type.
        cin >> dzien[i];
    }


    for(int i = 0;i<dzien.size();i++){
        if(dzien[i]>dzien[i+1])
            naj=dzien[i]-dzien[i+1];
    }
    cout << naj;
    return 0;
}```
2
vector <long> dzien[waga];

Utworzyłeś tablicę wektorów o wielkości waga, która jest niezainicjowana.

0

Zamieniłem miejscami dzien w waga, tylko dalej jest ten sam błąd

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    long dzien;
    cin >> dzien;
    int naj;
    vector <long> waga[dzien];

    for(int i = 0;i<waga.size();i++){
        cin >> waga[i];
    }


    for(int i = 0;i<waga.size();i++){
        if(waga[i]>waga[i+1])
            naj=waga[i]-waga[i+1];
    }
    cout << naj;
    return 0;
}
2

Przecież ci napisałem że masz użyć () zamiast []

vector <long> dzien(waga);

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