假定已经获取题库中的试题号抽取n题组成考题字符串

本文介绍了一种基于C#的算法实现,该算法能够从指定的试题库中随机抽取不重复的试题编号,并组成考题字符串。通过使用哈希表确保了随机抽取的试题编号不会重复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题及代码:

/*    
* Copyright (c) 2016, 烟台大学计算机与控制工程学院    
* All rights reserved.    
* 文件名称:kt.cpp                          
* 作    者:单昕昕                                
* 完成日期:2016年3月19日    
* 版 本 号:v1.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;//哈希表必用头文件
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int [] arrayKT=new int [100];
            Random rd = new Random();//Random类,用来产生随机数
            Hashtable ht = new Hashtable();//哈希表,这里用来判断是否有重复的数字
            int cnt = 0;//计数
            for (int i = 0; i < 1000; ++i)//多次循环来保证找到100个不重复的数字
            {
                int temp=rd.Next(1,101);//temp中间变量存储当前产生的随机数
                if (!ht.Contains(temp))//如果哈希表中不存在当前随机数
                {
                    ht.Add(temp, temp);//添加到哈希表中
                    arrayKT[cnt] = temp;//添加到题目序号数组中
                    ++cnt;//题目序号数组计数加一
                    if (cnt == 100)
                        break;
                }
            }
            //for (int i = 0; i < arrayKT.Length;++i )//测试用
                //Console.WriteLine(arrayKT[i]+"*"+i);
            Console.Write("n=");
            int n = int.Parse(Console.ReadLine());//输入n,表示要取出的考题数目
            Console.WriteLine("考题:"+getKTH(n, arrayKT));
            Console.ReadKey();
        }
        public static string getKTH(int n, params int[] arrayKT)//params实现方法形参个数可变
        {
            StringBuilder kt = new StringBuilder();//题目序号字符串
            for (int i = 0; i < n-1; ++i)
            {
                kt.Append(arrayKT[i].ToString() + ",");//向StringBuilder实例尾端追加字符串
            } 
            kt.Append(arrayKT[n-1].ToString());//为了保证输出格式,末尾一个数字后面没有逗号
        return kt.ToString();//返回新生成的题目序号字符串
        }
    }
}

运行结果:



其实其他的都很简单,就是还要写个哈希表判断有木有重复的~~

本软件是为广大需要自动命系统的学校提供方便。用户在使用时首先要将我们为您准备好的数据库连接到SQL上,然后才能使用。 由于用户是首次使用,所有要先进行用户注册。本软件只允许一个用户注册,注册完后请记住密码,以便以后使用。 为了让您能够检验我们的产品的实用性,我们预先在数据库中存放了一些相关试题。在您真正使用的时候,您可以通过SQL想数据库中输入试题,也可以通过我们软件为您提供的“添加”功能进行试题输入。为了避免试题抽取时可能会出现的试题重复现象,检验您输入适当多的试题。 下面介绍一下我们本软件的结构以及相关功能: 1.用户登录窗口 包括:用户名、用户密码、登录及用户信息修改。 2.用户信息修改窗口 包括:用户名修改、用户密码修改。 3.用户注册窗口 包括:用户名注册、用户密码注册。 4.自动命系统窗口 包括:系统(返回系统登录、推出系统)、试题更新(C#试题更新、.net 试题更新、高数试题更新)、试题检索(C# 试题检索、.net 试题检索、高数试题检索)、自动命C# 自动命、.net 自动命、高数自动命)、帮助(关于软件、联系我们)。 5.试题检索及更新窗口(两者共用) 对检索包括:基本的菜单栏、工具栏、试题栏(型、、搜索)。 对更新包括:基本的菜单栏、工具栏、试题栏(型、、搜索、添加、删除、更新)。 6.自动命窗口 包括:基本的菜单栏、工具栏、命栏(型、数、难度系数、总分、命) 以上为本软的概述,在使用中遇到问时,请按F1寻求帮助。 感谢使用!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值