C++ program do napisania z wykorzystaniem tablic

Odpowiedz Nowy wątek
2011-10-16 15:05
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

Pozostało 580 znaków

2011-10-16 15:49
zxcvb
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 .

Pozostało 580 znaków

2011-10-16 16:07
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;
}

Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)
edytowany 1x, ostatnio: MJay, 2011-10-16 22:06

Pozostało 580 znaków

2011-10-16 16:18
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

Pozostało 580 znaków

2011-10-16 16:46
0

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


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

2011-10-16 17:28
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

edytowany 1x, ostatnio: Ridez, 2011-10-16 17:40

Pozostało 580 znaków

2011-10-16 17:56
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;
}
edytowany 3x, ostatnio: Ridez, 2011-10-16 18:11

Pozostało 580 znaków

2011-10-16 22:08
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!


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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