Mam do napisania program który na wejściu dostaje ilość elementów, elementy i dzieli elementy na 2 grupy tak, żeby ich suma była równa. jeżeli suma jest nieparzysta ma wypisać nie, jeżeli suma jest parzysta ale największy element jest większy od połowy sumy również ma wypisać. Jeżeli wszystko jest w porządku ma wypisać 2 grupy tak jak napisałem wyżej.
Napisałem już kod, ale działa tylko dla niektórych przykładów. Jeżeli w przykładzie jakieś wartości się powtarzają to program wtedy nie zachowuje się tak jak powinien
int sumowanie(int *tab,int rozmiar)
{
int suma=0;
int i;
for(i=0;i
{
suma+=tab[i];
}
return suma;
}
int rozwiazanie(int *tab1,int *tab2,int rozmiar,int koniec,int suma,int pozycja)
{
for(;pozycja
suma+=tab1[pozycja];
if (suma == koniec){
tab2[pozycja]=1;
return 2;
}
if ( suma < koniec ){
tab2[pozycja]=1;
++pozycja;
rozwiazanie( tab1,tab2,rozmiar,koniec,suma,pozycja );
}
if( suma > koniec ){
suma-=tab1[pozycja];
tab2[pozycja]=0;
++pozycja;
}
}
return -1;
}
int main()
{
int N;
scanf("%d",&N);
int Tablica[100];
int Wynik[100]={0};
int i;
for(i=0;i
{
scanf("%d",&Tablica[i]);
}
int suma=sumowanie(Tablica,N);
if( suma%2 != 0 )
{
printf("NIE");
return 0;
}
if( Tablica[0] > suma/2)
{
printf("NIE");
return 0;
}
int koniec=suma/2;
int rob=0;
i=rozwiazanie(Tablica,Wynik,N,koniec,rob,0);
if (i == 2)
{
for(i=0;i
{
if ( Wynik[i]==1)
{
printf("%d ",Tablica[i]);
}
}
printf("\n");
for(i=0;i
{
if ( Wynik[i]==0)
{
printf("%d ",Tablica[i]);
}
}
printf("\n");
}
if (i == -1)
{
printf("NIE");
}
return 0;
}
Będę bardzo wdzięczny za pomoc w naprowadzeniu na znalezienie i poprawienie błędu.