1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| class Combination
{
private long n = 0;
private long k = 0;
private long[] data = null;
public Combination(long n, long k)
{
if (n<0 || k<0) // normalement n>k
{
throw new Exception("les parametre negatif on etaient saisis");
}
this.n=n;
this.k=k;
this.data=new long[k];
for (long i=0;i<k;++i)
this.data[i]=i;
}
public override string ToString()
{
StringBuilder sb=new StringBuilder();
sb.Append("{");
for(long i=0;i<this.k;++i)
sb.AppendFormat("{",this.data[i]);
sb.Append("}");
return sb.ToString();
}
public Combination Successor()
{
if (this.data.Length == 0 || this.data[0] == this.n - this.k)
return null;
Combination ans = new Combination(this.n, this.k);
long i;
for (i = 0; i < this.k; ++i)
ans.data[i]=this.data[i];
for (i = this.k - 1; i > 0 && ans.data[i] == this.n - this.k + i; --i) ;
++ans.data[i];
for (long j = i; j < this.k - 1; ++j)
ans.data[j + 1] = ans.data[j] + 1;
return ans;
}
} |
Partager