new-link关于课程表的问题要求每天都有自修课,请问在如下代码的基础上怎么修改?

作者:用户 来源:互联网 浏览:217 次 时间:2016-03-14 13:31:27

newforusinglink

new-link关于课程表的问题要求每天都有自修课,请问在如下代码的基础上怎么修改? - 摘要: link关于课程表的问题要求每天都有自修课,请问在如下代码的基础上怎么修改?usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;u

问题描述

link关于课程表的问题要求每天都有自修课,请问在如下代码的基础上怎么修改?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] courses = { ""体育课""体育课""美术课""音乐课""劳动课""语文课""数学课""英语课""};
var result = Enumerable.Range(0 5).Select(_ => Enumerable.Range(0 6).Select(__ => """").ToArray()).ToArray();
while (!result.All(x => x.Contains(""语文课"") && x.Contains(""数学课"") && x.Contains(""英语课"")))
{
var rndseq = Enumerable.Range(0 30).OrderBy(_ => Guid.NewGuid()).Zip(courses (x y) => new { x y }).ToArray();
for (int i = 0; i < 5; i++)
{
int pos = 0;
string[] cs = { ""语文课""数学课""英语课"" };
for (int j = 0; j < 6; j++)
{
if (rndseq.Any(x => x.x == i * 6 + j))
result[i][j] = rndseq.First(x => x.x == i * 6 + j).y;
else
result[i][j] = (pos++ < 3) ? cs[pos - 1] : ""自修课"";
}
}
}
result = result.Select(x => x.OrderBy(y => y == ""自修课"" ? 1 : 0).ThenBy(_ => Guid.NewGuid()).GroupBy(y => y).SelectMany(y => y).ToArray()).ToArray();
for (int j = 0; j < 6; j++)
{
for (int i = 0; i < 5; i++)
{
Console.Write(result[i][j] + ""t"");
}
Console.WriteLine();
}
}
}
}

解决方案

 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;using System.Threading.Tasks;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            string[] courses = { ""体育课""体育课""美术课""音乐课""劳动课""语文课""数学课""英语课""};            var result = Enumerable.Range(0 5).Select(_ => Enumerable.Range(0 6).Select(__ => """").ToArray()).ToArray();            while (!result.All(x => x.Contains(""语文课"") && x.Contains(""数学课"") && x.Contains(""英语课"") && x.Contains(""自修课"")))            {                var rndseq = Enumerable.Range(0 30).OrderBy(_ => Guid.NewGuid()).Zip(courses (x y) => new { x y }).ToArray();                for (int i = 0; i < 5; i++)                {                    int pos = 0;                    string[] cs = { ""语文课""数学课""英语课"" };                    for (int j = 0; j < 6; j++)                    {                        if (rndseq.Any(x => x.x == i * 6 + j))                            result[i][j] = rndseq.First(x => x.x == i * 6 + j).y;                        else                            result[i][j] = (pos++ < 3) ? cs[pos - 1] : ""自修课"";                    }                }            }            result = result.Select(x => x.OrderBy(y => y == ""自修课"" ? 1 : 0).ThenBy(_ => Guid.NewGuid()).GroupBy(y => y).SelectMany(y => y).ToArray()).ToArray();            for (int j = 0; j < 6; j++)            {                for (int i = 0; i < 5; i++)                {                    Console.Write(result[i][j] + ""t"");                }                Console.WriteLine();            }        }    }}
解决方案二:

while (!result.All(x => x.Contains(""语文课"") && x.Contains(""数学课"") && x.Contains(""英语课"") && x.Contains(""自修课"")))

解决方案三:

数学课 英语课 音乐课 语文课 语文课
数学课 英语课 美术课 体育课 英语课
劳动课 语文课 英语课 体育课 数学课
语文课 语文课 数学课 英语课 自修课
英语课 数学课 语文课 数学课 自修课
自修课 自修课 自修课 自修课 自修课
Press any key to continue . . .

【云栖快讯】《阿里巴巴Java开发手册》(详尽版)已经上线!您的Java学好了吗?如果没有,那就赶紧加入学习吧!  详情请点击
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一

云服务器9.9元/月,大学必备

热点导航