Wątek przeniesiony 2017-10-16 22:24 z C/C++ przez kq.

porównywanie elementów z JEDNEJ tablicy

0

Dzień dobry, mam zadanie "Należy wypisać wszystkie wartości kart, które występują nieparzyście wiele razy w talii w kolejności rosnącej". Pytanie, jak porównać elementy w tablicy?
Probowałem sposobu t[i] != t[i+1], ale nie dziła on prawidłowo.

#include <iostream>

using namespace std;

int main()

{
   int N;
   cin>>N;
   int t[N];
   int t2[N];

   int licznik =0;
   int i;

cout<<N;

   for (i=0; i<N; ++i)

   std::cin>>t[i];

   for(i=0; i<N; i++)

     if(t[i] != t[i+1]){
         licznik++;
         cout<<t[i];
     }

cout<<licznik<<"\n";

}
1

Przy ostatnim elemencie tablicy wychodzi ci poza nią (bo próbuje porównać z następnym którego NIE MA), dałbym raczej for(i=1; i<N; i++) oraz if(t[i] != t[i - 1]){

0

@sig: przypatrz się tym pętlom...

Dla jednego i drugiego fora do iteracji używa i. Powinien korzystać z dwóch różnych zmiennych do tego.

0

Dziękuje, działa lepiej, lecz pojawił się jeden problem, mianowicie przy porównaniu następnych elementów, porównuje także te sąsiednie i uważa że nie są równe, czyli

input 5
13 2 2 3 3

porównuje 13 z 2, 2 z 2 oraz 2 z 3 i to także uważa jakoby dwójka nie miała pary.

0

Obecny kod (lub jego fragment, tj. owa porównująca pętla) by nie zaszkodził. Z fusów ciężko cokolwiek wywróżyć.

0

Jasne, przepraszam.

#include <iostream>

using namespace std;
int ile(int N, int *t, int *t2, int licznik){
   for(int j=0; j<N-1; j++){
         if(t[j] != t[j-1]){
             licznik++;
             t2[j] = t[j];
             cout<<t2[j];
         }
      }

}
int main()

{
   int N;
   cin>>N;
   int t[N];
   int t2[N];
   int a = 0;

   int licznik =0;
   int i;
   int j;

   for (i=0; i<N; ++i) std::cin>>t[i];

   ile(N, t, t2, licznik);
    //cout<<licznik<<"\n";

}
0

Myślę że błąd jest w

if(t[j] != t[j-1]){
t2[licznik] = t[j];
cout<<t2[licznik];
}
0

Tak "na chama" zmiana if(t[j] != t[j-1]) na if(t[j] != t[j-1] && t[j] != t[j+1] ) spowoduje, że z podanego przykładu zostanie wypisane tylko 13. Ale patrząc na polecenie, jest to rozwiązanie złe.

"Należy wypisać wszystkie wartości kart, które występują nieparzyście wiele razy w talii w kolejności rosnącej"

Coś mi się wydaje, że podkreślony fragment oznacza "wartości kart występujące 3,5,7,9 itd razy".

0
Serechiel napisał(a):

Tak "na chama" zmiana if(t[j] != t[j-1]) na if(t[j] != t[j-1] && t[j] != t[j+1] ) spowoduje, że z podanego przykładu zostanie wypisane tylko 13. Ale patrząc na polecenie, jest to rozwiązanie złe.

"Należy wypisać wszystkie wartości kart, które występują nieparzyście wiele razy w talii w kolejności rosnącej"

Coś mi się wydaje, że podkreślony fragment oznacza "wartości kart występujące 3,5,7,9 itd razy".

Dokładnie o to chodzi i tutaj właśnie jest problem.

0

Dobrze to zrozumialem? Na wejsciu:[5,6,5,5,2,2,2,9,9], wyjscie: [2,5].

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