W skrócie to dostaje błąd (process exited due to signal 6).Generalnie taki błąd wyskakuje w momencie, gdy próbuje się odczytać lub zmienić wartość z poza tablicy. Ja jednak takiego problemu się nie doszukałem.
Treść zadania:
Halinka zapisała się do uniwersyteckiego żeńskiego zespołu tanecznego o wdzięcznej nazwie „Bitowianki”. Zespół właśnie przygotowuje nowy występ, gdzie wszystkie tancerki (a jest ich n) ustawione są w szeregu (każda na ustalonym, niezmiennym miejscu). Problemem są kostiumy tańczących dziewcząt: scenograf zażyczył sobie, aby były one białe lub czarne i do tego, aby układ kolorów w szeregu tworzył palindrom. Dla niektórych tancerek kostiumy już są kupione, a reszcie zespołu trzeba je dokupić – tak, aby zminimalizować koszt przygotowania występu (biały i czarny kostium mogą mieć różne ceny). Może się wszelako okazać, że nie da się dobrać odpowiednich kolorów i trzeba będzie wymyślić nową koncepcję występu. Twoim zadaniem jest wyznaczenie minimalnego kosztu zakupu kostiumów lub stwierdzenie, że nie da się uzyskać palindromu w szeregu.
Dane wejściowe Pierwszy wiersz danych wejściowych zawiera trzy liczby naturalne n, a oraz b (1 ¬ n ¬ 1000, 1 ¬ a, b ¬ 100) – odpowiednio: ilość tancerek w zespole, koszt białego oraz koszt czarnego kostiumu. Kolejny wiersz zawiera liczby naturalne k1, k2, . . . , kn równe 0 (jeśli tancerka nie posiada jeszcze kostiumu), 1 (jeśli posiada biały kostium) lub 2 (jeśli posiada czarny kostium). Liczby w wierszu oddzielone są pojedynczymi odstępami.
Wynik programu Program powinien wypisać minimalny koszt zakupu brakujących kostiumów lub słowo NIE, jeśli układ jest niemożliwy.
Przykład Dla danych wejściowych 5 3 4 0 1 0 1 2 prawidłowym wynikiem jest (pierwszej tancerce kupujemy czarny kostium, a trzeciej: biały): 7
Naprawdę głowię się nad tym już 4 godzinę i nadal nie mogę znaleźć przyczyny.
#include <iostream>
using namespace std;
bool Czy_pali(int tab[],int t ) // sprawdza czy tablica jest palindromem
{
int i,j;
for (i = 0, j = t-1; i <t/2; i++, j--)
{
if (tab[i] != tab[j])
break;
}
if (i < j)
return false;
else
return true;
}
int cena(int b,int cz){ // typuje niższą cene
if(b>cz)
return 2;
else
return 1;
}
int sum;
int main() {
int n,a,b;// liczba tancerek,koszt białych strojów,koszt czarnych strojów
int *tab=new int[n];
cin >> n;
cin >> a;
cin >> b;
for(int i = 0;i<n;i++){
cin >> tab[i];
}
int j=n-1;
int i = 0;
while(i<n/2){ // dla każdego j oraz i równego 0 ustala wartości 1 lub 2
if(tab[i]==0&&tab[j]!=0){ //wstawia w miejsce i j,gdy i=0
tab[i]=tab[j];
if(tab[j]==1)// zlicza cene
sum+=a;
else
sum+=b;
}
else if(tab[j]==0&&tab[i]!=0){ //wstawia w miejsce j i,gdy j=0
tab[j]=tab[i];
if(tab[i]==1)//zlicza cene
sum+=a;
else
sum+=b;
}
else if(tab[i]==0&&tab[j]==0){ //wstawia w miejsce j oraz i oznaczenie tańszego stroju
tab[i]=cena(a,b);
tab[j]=cena(a,b);
if(tab[j]==1) //zlicza cene
sum+=a*2;
else
sum+=b*2;
}i++;j--;
}
if(tab[n/2]==0){//jeżeli środkowy element tablicy jest równy 0 to przyjmuje tańszą opcję
tab[n/2]=cena(a,b);
if(tab[n/2]==1)
sum+=a;
else
sum+=b;
}
if(Czy_pali(tab,n))// w zależności od tego czy tablica jest palindromem zwraca koszt strojów kupionych
cout << sum;
else cout << "NIE";
delete[]tab;
return 0;
}
Dla danych wejściowych 7 5 10 1 2 1 0 0 1 0 prawidłowym wynikiem jest (kostiumy 2. i 6. tancerki psują układ): NIE