1 から 100 までの 1000 個のランダムな整数の配列を作成し、人が数字 (たとえば 68) を入力したときに、プログラムに 68 が何度も表示されるようにするにはどうすればよいですか?
次のような方法を探していると思います。
private static Random rnd = new Random();
public static IEnumerable<int> getRandomNumbers(int count, int lowerbound, int upperbound, int specialNumber = int.MinValue, int specialNumberCount = int.MinValue)
{
List<int> list = new List<int>(count);
HashSet<int> specialNumPositions = new HashSet<int>();
if (specialNumberCount > 0)
{
// generate random positions for the number that must be create at least n-times
for (int i = 0; i < specialNumberCount; i++)
{
while (!specialNumPositions.Add(rnd.Next(0, count)))
;
}
}
while (list.Count < count)
{
if (specialNumPositions.Contains(list.Count))
list.Add(specialNumber);
else
list.Add(rnd.Next(lowerbound, upperbound + 1));
}
return list;
}
この方法で使用できます:
// ensure that 68 is generated at least 10 times
var list = getRandomNumbers(1000, 1, 100, 68, 10);
デモ
リストに数値が表示される頻度を知りたい場合は、Linq を使用できます。
int count = list.Count(i => i == 68);