C++ program do napisania z wykorzystaniem tablic

0

Mam do napisania taki program:

Wejście:

Podajemy dwie liczby: k i g
k- liczba kandydatów
g -liczba oddanych głosów na kandydatów z zakresu od 1 do k
następnie wpisujemy numery kandydatów na których zostały oddane
głosy, ich liczba to g.

Wyjście:

Dla wszystkich kandydatów podajemy ile otrzymał każdy głosów
na końcu wypisujemy numer kandydata który wygrał jeżeli dwóch
kandydatów otrzymało tyle samo głosów wygrywa ten z niższym numerem

np.
Wejście
3 10 // k, g
1 3 2 1 2 3 3 3 2 2

Wyjście
1: 2
2: 4
3: 4
2

Zacząłem robić tak:

#include <iostream>

using namespace std;

const int MAXP = 100;

int main()
{
int m, n;
int P[MAXP];
int S[MAXP];

int i;

cin >> m >> n;

for(i = 0; i < n; i++)
      cin >> P[i];

for(i = 1; i <= m; i++)
S[i] = i;



system("pause");
return 0;
}

Proszę o pomoc co dalej

0

podczas sortowania tablicy P należy również w drugiej tablicy zamieniać wartości reprezentujące numery kandydatów , do sortowania użyj quicksorta, ewentualnie użyj mapy .

0
#include <iostream>
using namespace std;
int main()
{
     int iLiczbaKandydatow, iIloscOddanychGlosow;
     int *piKandydaci, *piGlosy;
     
     cout << "Podaj liczbe kandydatow: ";
     cin >> iLiczbaKandydatow;
     cout << "Podaj ilosc oddanych glosow: ";
     cin >> iIloscOddanychGlosow;
     piKandydaci = new int[iLiczbaKandydatow];     // definiujemy tablice o wielościach podanych przez użytkownika
     piGlosy = new int[iIloscOddanychGlosow];

     for(int i = 0; i < iIloscOddanychGlosow; ++i)
     {
          cin >> piGlosy[i];
          piKandydaci[piGlosy[i] - 1]++;                    // dodajemy do odpowiedniego kandydata +1 głos na niego
     }

     int winner = 0;
     for(int i = 1; i < iLiczbaKandydatow; ++i)
          if(piKandydaci[winner] < piKandydaci[i])      // sprawdzamy który z kandydatów miał najwięcej głosów, sprawdzamy dla i = 1,
               winner = i;                                            // bo nie oplaca się sprawdzać piKandydaci[0] z nim samym, pamiętając, że nie chcemy wyjść poza zakres (tak jak ty to zrobiłeś w programie u Ciebie [for(i = 1; i <= m; i++) - S[m] NIE ISTNIEJE])

     cout << "Zwyciezca jest " << winner + 1 << "!";  // dodajemy do winner + 1, bo indeksowanie zaczyna się od 0

     delete [] piGlosy;
     delete [] piKandydaci;
     system("pause"); 
     return 0;
}
0

A ja napisałem coś takiego

#include <iostream>

using namespace std;

const int MAXP = 100;

int main()
{
int m, n;
int P[MAXP];
int S[MAXP];
int K[MAXP];
int L[MAXP] = {0};

int i, j;

cin >> m >> n;

for(i = 0; i < n; i++)
      cin >> P[i];

for(i = 1; i <= m; i++)
{
S[i] = i;
K[i] = i;
}

for(i = 0; i <= m; i++)
      for(j = 0; j < n; j++)
{
if(K[i] == P[j])
{    
  L[i]++;
}
}
for(i = 1; i <= m; i++)
cout << S[i] << ": " << L[i] << "\n";




system("pause");
return 0;
}
 

Wypisuje mi dobre wyniki pozostało tylko na końcu wypisać numer który ma najwięcej głosów

0

Zapamiętaj index osoby która ma najwięcej głosów.
U mnie to jest kod pod tym jak definiuję zmienną winner

0
#include <iostream>
 
using namespace std;
 
const int MAXP = 100;
 
int main()
{
int m, n;
int P[MAXP];
int S[MAXP];
int K[MAXP];
int L[MAXP] = {0};
 
int i, j;
 
cin >> m >> n;
 
for(i = 0; i < n; i++)
      cin >> P[i];
 
for(i = 1; i <= m; i++)
{
S[i] = i;
K[i] = i;
}
 
for(i = 0; i <= m; i++)
      for(j = 0; j < n; j++)
{
if(K[i] == P[j])
{    
  L[i]++;
}
}
for(i = 1; i <= m; i++)
cout << S[i] << ": " << L[i] << "\n";
 
int winner = 0;
for(int i = 1; i < m; i++)
{
if(L[winner] < L[i])
{
             winner = i;
}
}
cout << winner << "\n";
system("pause");
 
 

return 0;
}

Teraz chyba jest dobrze

0

Teraz działa dobrze

#include <iostream>
 
using namespace std;
 
const int MAXP = 1000;
 
int main()
{
int m, n;
int P[MAXP];
int S[MAXP];
int K[MAXP];
int L[MAXP] = {0};
 
int i, j;
 
cin >> m >> n;
 
for(i = 0; i < n; i++)
      cin >> P[i];
 
for(i = 1; i <= m; i++)
{
S[i] = i;
K[i] = i;
}
 
for(i = 1; i <= m; i++)
      for(j = 0; j < n; j++)
{
if(K[i] == P[j])
{    
  L[i]++;
}
}
 
int winner = 0;
for(int i = 1; i <= m; i++)
{
if(L[winner] < L[i])
{
             winner = i;
}
}
for(i = 1; i <= m; i++)
cout << S[i] << ": " << L[i] << "\n";
cout << winner;
 

return 0;
}

0

W dalszym Ciągu masz błąd tutaj:

for(int i = 1; i <= m; i++)

W C++ indeksowanie zaczyna się od 0!!! więc ok możesz sprawdzać od i = 1 ale musisz zakończyć na i < m!

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