C#设计一个项目,有程序随机产生12个数,并把12个数按从大到小的顺序进行输出

 我来答
humingyo66
2011-09-21 · TA获得超过2.7万个赞
知道大有可为答主
回答量:2.4万
采纳率:0%
帮助的人:1.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 个随机二位整数。

 
 
 
reakylee
2011-09-20 · TA获得超过2104个赞
知道小有建树答主
回答量:719
采纳率:100%
帮助的人:705万
展开全部
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";
}
我这种写法你的数组的个数可以不固定,即动态数组,且不用自己去排序。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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] + " ");
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cy_paul
2011-09-20 · TA获得超过821个赞
知道小有建树答主
回答量:769
采纳率:100%
帮助的人:240万
展开全部
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>泛形集合,避免装箱和拆箱,大大提高效率
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式