>>77
 int A[100] = {0, 1, 2, 3, ... 99};
 int B[10];
 int index;

 for(i = 0; i < 10; i++)
 {
  index := random(100 - i);
  B[i] := A[index];

  // indexより右にある要素を左にずらす。
  if (index < 99 - i)
  {
   memmove(&A[index], &A[index + 1], 99 - i - index);
  }

 }

要件を満たしていませんか?

>>80
>結局何の確率が知りたいのかわかんない。

どこかに0-99までの値で重複しない乱数を10個取得する方法があるとすると、
その方法(方法1)と、上の方法(方法2)が同じ結果を出す確率です。

例えば結果が、1, 2, 3, ...となった場合、
方法2では、random(100 - i)が全部1を返した事になります。

そこで、方法1がデタラメに値を出して1, 2, 3...となった確率と
random(100 - i) が全部1 を返した確率は同じか?と思ったのでした。

randomは真の乱数を返すとします。
ここでは関数の実装方法による出目の確率は問題にしません。