假定已經獲取題庫中的試題號抽取n題組成考題字串

kewlgrl發表於2016-03-19

問題及程式碼:

/*    
* 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();//返回新生成的題目序號字串
        }
    }
}

執行結果:



其實其他的都很簡單,就是還要寫個雜湊表判斷有木有重複的~~

相關文章