Przesunięcie elementów w lewo w tablicy jednowymiarowej

0

siema, potrzebuje pomocy, mianowicie: mam za zadanie dodac te same elementy do siebie a w ich miejsce wstawic zera
np

2 3 0 0 2 2
2 3 4 0 0 0 

generalnie formalnie mam to zrobic na dwuwymiarowej, ale potrzebuje wiedziec, gdzie robie blad przy jednowymiarowej:

#include <iostream>

using namespace std;

int main()
{
int t[3]={0,3,3};
int i=0,a,b;

for(i=0; i<3; i++) cout << t[i] << " "; 

for(i=0;i<2;i++)
{
	if(t[i]==t[i+1] || t[i]==0)
	{
		a=t[i];
		b=t[i+1];
		t[i]=a+b;
		t[i+1]=0;
	}
}

cout << endl; 
for( i=0; i<3; i++) cout << t[i] << " "; 
	
}
0

Nie rozumiem zadania.
Skoro dodajesz takie same to czemu z:
2 3 0 0 2 2
wychodzi nie:
2 3 0 0 4 0

Poza tym wcale nie jasne co ma być w przypadku: 2 3 0 2 2 2

0

Jeśli Twój przykład wskazuje na to, że te same liczby mają być obok siebie oraz jeśli możesz użyć std::array lub std::vector to myślę, że możesz uprościć sobie zadanie algorytmem std::equal_range
https://cplusplus.com/reference/algorithm/equal_range/

Equal range zwraca Ci parę iteratorów: dla x (wynik >= x, wynik > x) jeśli taki istnieje.

// 10 10 10 [20] 20 20 [30] 30 (kwadratowe nawiasy pokazują wynik algorytmu dla argumentu 20 przy danej tablicy).

Kontener musi być posortowany(std::sort).
Zrób algorytm dla tablicy jednowymiarowej a potem wywołaj go w pętli dla kolejnych tablic.

https://cplusplus.com/reference/iterator/distance/

std::distance również może okazać się przydatny.

1
constantine napisał(a):

Jeśli Twój przykład wskazuje na to, że te same liczby mają być obok siebie oraz jeśli możesz użyć std::array lub std::vector to myślę, że możesz uprościć sobie zadanie algorytmem std::equal_range

Może przeczytaj pytanie przed udzieleniem odpowiedzi.

0
_13th_Dragon napisał(a):
constantine napisał(a):

Jeśli Twój przykład wskazuje na to, że te same liczby mają być obok siebie oraz jeśli możesz użyć std::array lub std::vector to myślę, że możesz uprościć sobie zadanie algorytmem std::equal_range

Może przeczytaj pytanie przed udzieleniem odpowiedzi.

_13th_Dragon napisał(a):

Nie rozumiem zadania.

Zadanie ma dziwny opis i przykład, może czegoś nie zrozumiał w nim.

O i prawie zapomniałem. Staraj się korzystać z nowoczesnych kontenerów i algorytmów kiedy tylko masz taką możliwość.
https://cplusplus.com/reference/algorithm/

1
#include <iostream>
using namespace std;

int main()
{
	const int size=6;
	int tb[size]={2,4,0,2,2,2};
	
	for(bool more=true;more;)
	{
		more=false;
		int last=0;
		for(int i=0;i<size;++i)
		{
			if(tb[i])
			{
				if(i>last) 
				{
					tb[last]=tb[i];
					more=true;
				}
				++last;
			}
		}
		while(last<size) tb[last++]=0;
		for(int i=1;i<size;++i)
		{
			if((tb[i])&&(tb[i-1]==tb[i]))
			{
				tb[i-1]=2*tb[i];
				tb[i]=0;
				more=true;
			}
		}
	}
	for(int i=0;i<size;++i) cout<<(","+!i)<<tb[i];
	cout<<endl;
	return 0;
}

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