Witam,
zmagam się z jednym algorytmem "Podziały liczby w kolejności antyleksykograficznej".
Napisałem sobie implementację,jak poniżej:
public class Podzialy {
void Podzialy_liczby(int n)
{
int d, sum, l;
int S[] = new int[n ];
int R[] = new int[n ];
try
{
S[0] = n;
R[0] = 1;
d = 1;
FileWriter outFile = new FileWriter("podzial_liczby.txt");
PrintWriter out = new PrintWriter(outFile);
// pierwszy podzial
out.println(n);
while (S[0] > 1) //znajdz nastepny podzial
{
sum = 0;
if (S[0] == 1) break;
if (S[d - 1] == 1) sum += R[--d];
sum += S[d - 1];
R[d - 1]--;
l = S[d - 1] - 1;
if (R[d - 1] > 0) d++;
S[d - 1] = l;
R[d - 1] = sum / l;
l = sum % l;
if (l != 0)
{
S[d] = l;
R[d++] = 1;
}
out.print(S[0]);
out.print(S[1]);
out.print(S[2]);
out.print(S[3]);
out.print("\n");
}
out.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Podzialy x = new Podzialy();
x.Podzialy_liczby(5);
}
}
jednak zamiast na wyjściu podać mi cos a`la:
5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
dostaję coś innego,
Chciałbym prosić o pomoc w skończeniu tego algorytmu,
za pomoc na pewno uścisk ręki prezesa i piwo :)
pozdrawiam