需求: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();
}
}
}
語文 數學 英語 自修 體育 美術
自修 語文 數學 英語 體育 音樂
數學 英語 自修 語文 勞動 美術
英語 自修 語文 數學 音樂 體育
自修 體育 美術 勞動 語文 數學
每天滿足必修 + 自修,隨機分布。