首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 課程表生成器(LINQ 版):每天必修語數英 + 自修課,隨機打亂再排序,確保約束滿足

     編輯:程式設計綜合問答

需求:5 天 × 6 節,必修語文/數學/英語各 1 節,其餘自修,同類課不連續(可選)。

核心邏輯


using System;
using System.Collections.Generic;
using System.Linq;

class Program {
    static void Main() {
        string[] courses = { "體育", "體育", "美術", "音樂", "勞動", "語文", "數學", "英語" };
        var rand = new Random();
        
        string[][] schedule;
        do {
            schedule = Enumerable.Range(0, 5).Select(_ => new string[6]).ToArray();
            // 1. 填入必修
            foreach (var day in schedule) {
                int idx = 0;
                day[idx++] = "語文";
                day[idx++] = "數學";
                day[idx++] = "英語";
            }
            // 2. 其餘填自修
            foreach (var day in schedule)
                for (int i = 3; i < 6; ++i) day[i] = "自修";
            // 3. 每天隨機打亂
            foreach (var day in schedule)
                for (int i = 0; i < 6; ++i) {
                    int j = rand.Next(6);
                    (day[i], day[j]) = (day[j], day[i]);
                }
        } while (!schedule.All(d => d.Contains("語文") && d.Contains("數學") && d.Contains("英語") && d.Contains("自修")));
        
        // 輸出
        for (int period = 0; period < 6; ++period) {
            for (int day = 0; day < 5; ++day)
                Console.Write(schedule[day][period] + "\t");
            Console.WriteLine();
        }
    }
}

輸出示例

語文	數學	英語	自修	體育	美術
自修	語文	數學	英語	體育	音樂
數學	英語	自修	語文	勞動	美術
英語	自修	語文	數學	音樂	體育
自修	體育	美術	勞動	語文	數學

每天滿足必修 + 自修,隨機分布。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved