Board logo

標題: C# 7 407 隨機抽樣工作日 [打印本頁]

作者: may    時間: 2024-1-8 22:30     標題: C# 7 407 隨機抽樣工作日

TQC+ 物件導向程式語言
最新一次更新時間:2024-01-05 15:00:32

1. 題目說明:
請新增一個主控台應用程式,加入C:\ANS.CSF\CS04資料夾中的CSD04.cs進行編寫。依下列題意進行作答:以輸入2018的數字做為西元年份及亂數種子,取得及輸出該年十個不重複的工作日日期,使輸出值符合題意要求。檔案名稱請另存新檔為CSA04.cs,儲存於C:\ANS.CSF\CS04資料夾,再進行評分。

2. 設計說明:
請撰寫程式,輸入一個2000-2018之間的數值,請檢查不可超出2000-2018的邊界。
此數值做為西元年份及亂數種子,取得十個不重複的工作日日期並輸出,工作日定義是週一至週五,輸出格式如:【2018:3/7 3/10 4/9 5/22 6/5 8/7 8/24 9/11 11/6 12/5】,日期間以半形空格隔開。
3. 輸入輸出:
輸入說明
1個2000-2018之間的數值,做為西元年份及亂數種子

輸出說明
10個工作日日期(日期間以半形空格隔開)
(輸出最後一行後不自動換行)

範例輸入1
2018
範例輸出1
2018:12/24 1/31 8/21 5/31 12/13 11/28 7/11 4/25 2/23 2/26

範例輸入2
2019
範例輸出2
error

4. 評分項目:
(1) 符合設計說明輸出正確格式配分        20
作者: may    時間: 2024-1-9 09:36

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;

  6. namespace CSA04
  7. {
  8.     class CSA04
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             try
  13.             {
  14.                 //TODO
  15.                 int seed = int.Parse(Console.ReadLine());
  16.                 if (seed < 2000 || 2018 < seed)
  17.                 {
  18.                     throw new ArgumentException("seed should be in [2000, 2018]");
  19.                 }

  20.                 HashSet<string> set = new HashSet<string>();

  21.                 // define the day randge: ${seed}/1/1 - ${seed+1}/1/1(excluded)
  22.                 DateTime startDay = new DateTime(seed, 1, 1);
  23.                 DateTime endDay = new DateTime(seed + 1, 1, 1);
  24.                 int totalDays = (endDay - startDay).Days; // consider the leap year

  25.                 Random rand = new Random(seed);
  26.                 DateTime randomDay;
  27.                 TimeSpan offset; // day to ticks
  28.                 string randomDate;

  29.                 while (set.Count() < 10)
  30.                 {
  31.                     offset = new TimeSpan(
  32.                         TimeSpan.TicksPerDay * rand.Next(0, totalDays));
  33.                     randomDay = startDay + offset;

  34.                     if (randomDay.DayOfWeek == DayOfWeek.Saturday
  35.                         || randomDay.DayOfWeek == DayOfWeek.Sunday)
  36.                     {
  37.                         continue;
  38.                     }
  39.                     randomDate = randomDay.Month + "/" + randomDay.Day;
  40.                     set.Add(randomDate);
  41.                 }

  42.                 Console.Write("{0}:{1}",
  43.                     seed, String.Join(" ", set));//TODO
  44.             }
  45.             catch
  46.             {
  47.                 Console.Write("error");
  48.             }
  49.             Console.ReadKey();
  50.         }
  51.     }
  52. }
複製代碼





歡迎光臨 種子論壇 | 高雄市資訊培育協會學員討論區 (http://istak.org.tw/seed/) Powered by Discuz! 7.2