C#上机 第九周 任务2 从题库中随机抽题

/* 
* 程序头部注释开始   
* 程序的版权和版本声明部分   
* Copyright (c) 2011, 烟台大学计算机学院学生   
* All rights reserved.   
* 文件名称:从题库中随机抽题                         
* 作    者:薛广晨                               
* 完成日期:2012  年 10 月  29  日   
* 版 本号:x1.0            
   
* 对任务及求解方法的描述部分   
* 输入描述:  
* 问题描述: 假定已经获取题库中的试题号,并存放在数组arrayKT中。
*           例如, int [] arrayKT={10,13,18,19,20,22,30,31...}。
*           定义一个静态成员方法,该方法实现从上述数组中随机抽出给定数量(n,1<=n<=arrayKT.Length)的考题,并组成一个考题字符串。
*           比如,随机从arrayKT中抽取5题组成考题字符串:“10,18,20,22,30”。
*           要求,组成考题字符串中考题不重复,且一定在数组中存在。自行设计程序验证上述方法正确性。
            public static string getKTH(int n,params int [] arrayKT)
            {
                //提示:主体中使用random类
            }



* 程序输出:   
* 程序头部的注释结束 
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] arrayKT = { 10, 13, 18, 19, 20, 22, 30, 31, 32, 35, 41, 46 };
            string str = getKTH(5, arrayKT);
            Console.WriteLine("考题为:{0}", str);
            Console.ReadKey();
        }

        public static string getKTH(int n, params int[] arrayKT)
        {
            if(n > arrayKT.Length)  
            {  
                Console.WriteLine("超出题库的总题目数目!");  
                return "";  
            } 

            string str = "";
            int[] index = new int[arrayKT.Length];
            for (int i = 0; i < arrayKT.Length; i++)
                index[i] = arrayKT[i];
            Random rd = new Random();
            //用来保存随机生成的不重复的10个数
            int[] result = new int[n];
            int site = arrayKT.Length;//设置下限
            int id;
            for (int j = 0; j < n; j++)
            {
                id = rd.Next(site - 1);
                //在随机位置取出一个数,保存到结果数组
                result[j] = index[id];
                //最后一个数复制到当前位置
                index[id] = index[site - 1];
                //位置的下限减少一
                site--;
            }

            for (int i = 0; i < n; i++)
            {
                str += result[i].ToString();
                if (i < n - 1)
                {
                    str += ", ";
                }
            }
            return str;
        }
    }
}

运行结果:


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值