C# 随机位置字符
我面临着把字符放在随机位置的问题 我有一张满是点的表格,我必须用C# 随机位置字符,c#,random,C#,Random,我面临着把字符放在随机位置的问题 我有一张满是点的表格,我必须用* var indexes = Enumerable.Range(0,50).OrderBy(x => rng.Next()).Take(50*30/100).ToList(); 尺寸:10x5 我使用了函数Random Random rnd = new Random(); if (rnd.Next() % 10 > 3) Console.Write(". "); else Console.Writ
*
var indexes = Enumerable.Range(0,50).OrderBy(x => rng.Next()).Take(50*30/100).ToList();
尺寸:10x5
我使用了函数Random
Random rnd = new Random();
if (rnd.Next() % 10 > 3)
Console.Write(". ");
else
Console.Write("* ");
所有东西都在2个环中,可容纳桌子的长度和高度(10x5)
但它只使30%的概率成为*
而不是
它的位置很好,但每次我启动一个程序时,*
的数量都不同
每次我启动程序时,它应该只有16个*
(17-如果四舍五入)
我应该如何假设30%总是代替概率?编写代码,执行以下操作:
编写执行以下操作的代码:
你有50个点。计算
50*30/100
,它变为15
然后在0到50的范围内生成15个唯一的随机数。这些数字是您必须用*
var indexes = Enumerable.Range(0,50).OrderBy(x => rng.Next()).Take(50*30/100).ToList();
如果您使用的是二维索引,那么将一维索引转换为二维索引相当容易
var i = index % 5;
var j = index / 5;
根据@KonradRudolph所说的,如果您不想使用OrderBy,您可以查看这里发布的其他方法来洗牌数组(或创建随机集)
我建议您使用,而不是使用OrderBy
var indexes = Enumerable.Range(0, 50).ToArray();
RandomExtensions.Shuffle(rng, indexes);
你有50个点。计算
50*30/100
,它变为15
然后在0到50的范围内生成15个唯一的随机数。这些数字是您必须用*
var indexes = Enumerable.Range(0,50).OrderBy(x => rng.Next()).Take(50*30/100).ToList();
如果您使用的是二维索引,那么将一维索引转换为二维索引相当容易
var i = index % 5;
var j = index / 5;
根据@KonradRudolph所说的,如果您不想使用OrderBy,您可以查看这里发布的其他方法来洗牌数组(或创建随机集)
我建议您使用,而不是使用OrderBy
var indexes = Enumerable.Range(0, 50).ToArray();
RandomExtensions.Shuffle(rng, indexes);
想象一下你的数组只有50个元素,暂时忘记矩形的形状。你会怎么做?声明X点和50-X星,然后随机排序。就像你随机排列一个1->50的数字列表一样 现在如何随机排列1->50个数字的列表?一个简单直观的方法是想象洗牌。通过循环,在1->50中为每个位置获得一个随机数。选择交换元素(比如,对于i=1,我们得到了随机数7=>交换元素1和7)
在这里,您只需要将这个矩形映射到这50个点,这对于2D来说已经足够简单了。将您的数组想象为只有50个元素,现在就忘掉矩形形状。你会怎么做?声明X点和50-X星,然后随机排序。就像你随机排列一个1->50的数字列表一样 现在如何随机排列1->50个数字的列表?一个简单直观的方法是想象洗牌。通过循环,在1->50中为每个位置获得一个随机数。选择交换元素(比如,对于i=1,我们得到了随机数7=>交换元素1和7)
在这里,您只需要将这个矩形映射到这50个点,这对于2D来说已经足够简单了。我会随机选择30%的可能位置
// create char array
int arrayRows = 5;
int arrayCols = 10;
char[,] arr= new char[arrayRows ,arrayCols];
// populate array with dots
for (int i = 0; i < arrayRows; i++)
{
for (int j = 0; j < arrayCols; j++)
{
arr[i,j] = '.';
}
}
Random rnd = new Random();
int numberOfPossiblePositions = arrayRows * arrayCols;
int k = 0;
while (k < numberOfPossiblePositions * 0.3) {
int position = rnd.Next(numberOfPossiblePositions);
int colIndex = position / 10;
int rowIndex = position % 10;
// if the cell already has * try again
if (arr[rowIndex,colIndex] == '*') {
continue;
}
arr[rowIndex,colIndex] = '*';
k++;
}
//创建字符数组
int arrayRows=5;
int-arrayCols=10;
char[,]arr=新字符[arrayRows,arrayCols];
//用点填充数组
for(int i=0;i
我会随机选择30%的可能职位
// create char array
int arrayRows = 5;
int arrayCols = 10;
char[,] arr= new char[arrayRows ,arrayCols];
// populate array with dots
for (int i = 0; i < arrayRows; i++)
{
for (int j = 0; j < arrayCols; j++)
{
arr[i,j] = '.';
}
}
Random rnd = new Random();
int numberOfPossiblePositions = arrayRows * arrayCols;
int k = 0;
while (k < numberOfPossiblePositions * 0.3) {
int position = rnd.Next(numberOfPossiblePositions);
int colIndex = position / 10;
int rowIndex = position % 10;
// if the cell already has * try again
if (arr[rowIndex,colIndex] == '*') {
continue;
}
arr[rowIndex,colIndex] = '*';
k++;
}
//创建字符数组
int arrayRows=5;
int-arrayCols=10;
char[,]arr=新字符[arrayRows,arrayCols];
//用点填充数组
for(int i=0;i
创建一个包含x*y/3起始点的数组,其余为点。按随机顺序排序,然后遍历它
这是阵列:
Enumerable.Range(0, count).Select(i => new {Text = "*", Order = rnd.Next() })
.Concat(Enumerable.Range(0, x*y - count)
.Select(i=>new { Text = ".", Order = rnd.Next() }))
.OrderBy(i => i.Order).Select(i=>i.Text).ToList();
这是迭代的代码:
Random rnd = new Random();
int x = 10;
int y = 5;
int count = x*y/3;
var allPlaces =
Enumerable.Range(0, count).Select(i => new {Text = "*", Order = rnd.Next() })
.Concat(Enumerable.Range(0, x*y - count)
.Select(i=>new { Text = ".", Order = rnd.Next() }))
.OrderBy(i => i.Order).Select(i=>i.Text).ToList();
for (var i = 0; i < x; x++)
{
for (var j = 0; j < y; j++) { Console.Write(allPlaces[i*j + j]); }
Console.WriteLine();
}
Random rnd=new Random();
int x=10;
int y=5;
整数计数=x*y/3;
var allPlaces=
Enumerable.Range(0,count)。选择(i=>new{Text=“*”,Order=rnd.Next()})
.Concat(可枚举的.Range(0,x*y-计数)
.Select(i=>new{Text=“.”,Order=rnd.Next()}))
.OrderBy(i=>i.Order).Select(i=>i.Text.ToList();
对于(变量i=0;i
创建一个包含x*y/3起始点的数组,其余为点。按随机顺序排序,然后遍历它
这是阵列:
Enumerable.Range(0, count).Select(i => new {Text = "*", Order = rnd.Next() })
.Concat(Enumerable.Range(0, x*y - count)
.Select(i=>new { Text = ".", Order = rnd.Next() }))
.OrderBy(i => i.Order).Select(i=>i.Text).ToList();
及