C#设计一个项目,有程序随机产生12个数,并把12个数按从大到小的顺序进行输出
4个回答
展开全部
' 注释在底端。
Private Sub Form_Load()
Const LOWER_LIMIT = 10
Const UPPER_LIMIT = 99
Const RANGE = UPPER_LIMIT - LOWER_LIMIT + 1
On Error Resume Next ' 注 1
Dim sortedRandoms As New Collection ' 注 2
Randomize ' 注 3
Do Until sortedRandoms.Count = 30 ' 注 4
newRandom = Int(RANGE * Rnd) + LOWER_LIMIT ' 注 5
For Each random In sortedRandoms ' 注 6
If random > newRandom Then Exit For
Next
sortedRandoms.Add newRandom, CStr(newRandom), CStr(random) ' 注 7
sortedRandoms.Add newRandom, CStr(newRandom) ' 注 8
Loop
AutoRedraw = True ' 注 9
Height = 6666
For Each random In sortedRandoms
Print Tab; random
Next
End Sub
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 注:
'
' 1)策略性地忽略集合(Collection)的 Add 方法可能引起的错误:
' 5 和 457(参见注 7 和 8)
' 2)为了利用集合的这个属性:不添加已添加过的键。
' 另外,集合提供的 Add 方法让添加元素的操作非常方便 !
' 3)没有这一句则每一次程序运行都输出同一组随机数。
' 4)这个外部循环会一直运行到 sortedRandoms 收集到 30 个元素为止。
' 5)取下一个随机的二位整数。
'
' Rnd 的返回值是大于或等于 0 但小于 1 的随机浮点数( 0.0 <= Rnd < 1.0 )。
' 乘以 RANGE 的作用是把 Rnd 的返回值上限扩大成 RANGE:
' RANGE * 0.0 <= Range * Rnd < RANGE * 1.0
' = 0.0 <= RANGE * Rnd < RANGE
'
' 我们的 RANGE = 90,所以 0.0 <= RANGE * Rnd < 90.0 。
'
' Int 返回其参数的整数部分,所以 0 <= Int(RANGE * Rnd) <= 89 。
'
' 加 LOWER_LIMIT 的目的则是移动整个范围,逼它涵盖所有二位整数:
' 0 + LOWER_LIMIT <= Int(RANGE * Rnd) + LOWER_LIMIT <= 89 + LOWER_LIMIT
' = 10 <= Int(Range * Rnd) + LOWER_LIMIT <= 99
' 6)这个内部循环加上这循环之后的两个元素添加语句造就了插入排序。
' 这样的安排使得 sortedRandoms 能名副其实的一直保持它包含的所有元素的升序状态。
'
' 原理简单。其实就跟这种情况一样:
' 玩纸牌时玩家把庄家派过来的(随机)牌一张一张地加到握牌的手上时,
' 总把要添加的牌加在所有比它大的牌当中最小的一张的左边。
' 若手上没有更大的牌,则添加到最右侧。结果是手里的牌总保持升序状态。
'
' 这个 For Each 循环遍历集合的元素时,一旦遇上比要添加的数更大的元素便中止,
' 否则遍历所有元素并把 Empty 赋值给循环变量 random 。
' 所以,循环结束后,random 的值是以下的其中一个:
' A)所有比要添加的数更大的元素当中最小的一个
' B)Empty
' 另外,若集合是空的(程序第一次进入外部循环时),这个循环就会直接被跳过,
' random 也就从未被赋值,也为 Empty 。
' 7)以 CStr(newRandom) 作为 newRandom 的键,
' 尝试把 newRandom 这个值添加到 sortedRandoms 里 CStr(random) 的前面(注 6A)。
'
' 调用 CStr 函数把参数转换成字符串的原因是元素的键必须是字符串。
'
' 若 random 是 Empty,这句会引起错误 5:非法的参数或函数调用。(当然是前者。)
' 引起错误 457 则表示要添加的元素的键已存在于集合中。
'
' 结果是,这一句只有在 sortedRandoms 里有大于 newRandom 的元素,同时没有等于
' newRandom 的元素时,才会把 newRandom 加进去。
'
' sortedRandoms 是空的或里头没有大于 newRandom 的元素的状况交给下一句处理。
' 8)效果跟注 7 的一样,只不过是尝试添加到 sortedRandoms 的尾段,
' 而且因为少了可能 Empty 的 random 做参数,所以不可能引起错误 5 。
' 9)没有这一句则看不到打印在这个表格上的 30 个随机二位整数。
展开全部
Random rd = new Random();
ArrayList arr = new ArrayList();
for (int i = 0; i < 12; i++)
{
arr.Add(rd.Next(1,100));
}
arr.Sort();
for (int j = arr.Count - 1; j >= 0; j--)
{
richTextBox1.Text += arr[j].ToString() + "\r";
}
我这种写法你的数组的个数可以不固定,即动态数组,且不用自己去排序。
ArrayList arr = new ArrayList();
for (int i = 0; i < 12; i++)
{
arr.Add(rd.Next(1,100));
}
arr.Sort();
for (int j = arr.Count - 1; j >= 0; j--)
{
richTextBox1.Text += arr[j].ToString() + "\r";
}
我这种写法你的数组的个数可以不固定,即动态数组,且不用自己去排序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-09-20
展开全部
Random p = new Random();
int i;
int[] a = new int[12];
for (i = 0; i < 12; i++)
a[i] = p.Next(1000);
int j;
for(i=0;i<12;i++)
for(j=i+1;j<12;j++)
if (a[i] < a[j])
{ int t = a[i];
a[i] = a[j];
a[j] = t;
}
for (i = 0; i < 12; i++)
Console.Write(a[i] + " ");
int i;
int[] a = new int[12];
for (i = 0; i < 12; i++)
a[i] = p.Next(1000);
int j;
for(i=0;i<12;i++)
for(j=i+1;j<12;j++)
if (a[i] < a[j])
{ int t = a[i];
a[i] = a[j];
a[j] = t;
}
for (i = 0; i < 12; i++)
Console.Write(a[i] + " ");
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Random rd = new Random();
List<int> arr = new List<int>(12);
for (int i = 0; i < 12; i++)
{
arr.Add(rd.Next(1,100));
}
arr.Sort();
for (int j = arr.Count - 1; j >= 0; j--)
{
richTextBox1.Text += arr[j].ToString() + "\r";
}
//把二楼的优化了一下,使用List<T>泛形集合,避免装箱和拆箱,大大提高效率
List<int> arr = new List<int>(12);
for (int i = 0; i < 12; i++)
{
arr.Add(rd.Next(1,100));
}
arr.Sort();
for (int j = arr.Count - 1; j >= 0; j--)
{
richTextBox1.Text += arr[j].ToString() + "\r";
}
//把二楼的优化了一下,使用List<T>泛形集合,避免装箱和拆箱,大大提高效率
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询