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

作者:用户 来源:互联网 浏览:239 次 时间: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 . . .

【云栖快讯】诚邀你用自己的技术能力来用心回答每一个问题,通过回答传承技术知识、经验、心得,问答专家期待你加入!  详情请点击
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

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

现在注册,免费体验40+云产品,及域名优惠!

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

热点导航