Witajcie.
Mam nadzieję, że temat umieszczam w prawidłowym dziale (dopiero się zarejestrowałem).
Mój program ma wczytywać dowolną liczbę, a następnie wypisywać wszystkie kombinacje ciągów cyfr, których suma będzie równa tej liczbie.
Namęczyłem się, ale udało się - program działa.
Ale jednak przy większych liczbach (pow 15) przerywa w momencie swoją pracę i dokańcza ją wypisując:
1
1
1
1
1
Wiem, że wielu z Was zrobiłoby ten program lepiej i sprawniej, ale zrobiłem go tak jak jest i potrzebuje tylko pomocy co do tego dlaczego program tak działa...
oto kod programu
#include <iostream>
#include <conio.h>
using namespace std;
int main(int argc, char *argv[])
{
int n,x,i,suma,b,k,c;
cout<<"Podaj n"<<endl;
cin>>n;
cout<<endl;
i=n;
k=0;
for (i;i>0;)
{
int tab[i-1];
c=-1;
suma=0;
x=i;
for (x;x>0;)
{
if ((suma+x)<=n)
{
c++;
//cout<<" s="<<suma<<" ";
tab[c]=x;
cout<<x<<" ";
suma=suma+x;
}
else
x--;
if ((suma==n)and(c<=n-x)and(c!=0)and(tab[1]!=1))
{
cout<<endl;
k++;
suma=0;
int a=0;
for (c;c>0;)
{
if (tab[c]!=1)
{
for (int d=0;d<c;d++)
{
cout<<tab[d]<<" ";
suma=suma+tab[d];
a++;
}
x=tab[c]-1;
c=0;
}
else
c--;
}
c=-1+a;
}
}
cout<<endl;
i--;
k++;
}
cout<<"Ilosc kominacji "<<k<<endl;
int wybor;
cin>>wybor;
return 0;
}
Dzięki za pomoc ;-)
Pozdrawiam:
mrozo
P.S. Aha i jeszcze coś. Program od zmiennej 12 w góre wypisuje błędną ilość jedynek na samym końcu, też nie wiem dlaczego :/