高分求一算法

clon 2004-11-06 04:57:21
现有如下定义:

符号说明:
{...} 表示一个定义
[...] 表示内容可有可无
..|.. 表示内容多选一
‘’ 表示单引号内的字符应原样出现在实际的定义中
<...> 表示一个变量

语法定义:

<合格条件>::={<条件逻辑><条件名称>‘:’<子条件>[,...子条件n]}
<条件逻辑>::={[‘#’]‘&’|‘|’[‘+’][‘(’<课程组合格门数>[‘,’<课程组合格学分>]‘)’]}
<子条件>::={‘(’<合格条件>‘)’|<课程代码>}

举例:
例1:“&某专业合格条件:1,2,(|(2,5)选修课:(|选修课组:3,4,9)),(&必修课组2:5,6),7,8”
例2:“&某专业合格条件:1,2,(|(2)选修课:(&选修课组1:3,4,9),(&选修课组2:5,6)),7,8”
实例1:&:1,2,3,(|:14,12),(|(2,33):37,38,40),(|(2):30,31,32),(|:7,8,11)
实例2:&:(&:6,2)

说明:1、<合格条件>由字符‘&’或者‘|’开始。其中‘&’表示所有子
条件都满足合格条件才满足,即必修;‘|’表示选修。
2、选修课组可以定义多选多,方法是在‘|’后跟如‘(2,5)’这
样的定义。括号内前一个数是课程组合格所必须修的课程(组)
门数(只针对下一级),后一个数是课程组合格所需的学分。
数字0表示合格门数或合格学分没有定义。如果‘|’后没有括
号,则表示多选一,不要求学分。如果括号内只有一个数,表
示只定义合格门数。
3、多选多中,如果课程组有学分要求定义,则支持嵌套。即,对
于一个定义了学分要求的课程组,它可以有子课程组。
4、<条件名称>是一个可以为空的字符串,其中不能包含字符‘:’
以及回车换行,对于选修课组,条件名称的第一个字符不能是
半角的左括号‘(’(参见第2条)。
字符‘:’表示条件名称结束,接下来是子条件。
5、<子条件>至少要有一个,可以有多个,子条件之间用字符‘,’
(半角)分隔。
6、<子条件>可以是一个用括号对‘()’嵌套的合格条件,也可以
是一个课程代码。课程代码必须是数字。
7、实践课之前的课程是实践环节的前提。
8、语法中不得包含半角的单引号<'>,半角的双引号<">,语法字符
串总长不得超过1024个字节。
9、<合格条件>可以由字符‘#’开始,表示子条件是一个基础科段。
在整个毕业条件中,‘#’只能出现一次,即只能定义一个子条
件为基础科段。
10、在字符‘|’或‘&’之后的加号‘+’表示一个专业方向。



求一算法,如何根据这样的定义推出其中哪几门课程是必修课,哪几门是选修课
...全文
142 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
clon 2004-11-12
  • 打赏
  • 举报
回复
虽然问题在这个贴子中没有得到解决,但还是感谢热心的朋友们
johnsunac 2004-11-11
  • 打赏
  • 举报
回复
类似道理:(以下是过滤不友好字符和非法字符时使用正则表达式的做法,你可以参考一下)
web.config中:
<add key="BadWords" value="我靠#[你|您|他|她]?妈的#狗[日|养]的|妈卖.{1}#[日|操]?[你|您|他|她|它]妈的?" />
//设置要过滤的不友好或非法字符

//---------PoweredBy:阿山NET-------------------//
//---------最后更新时间:2004年2月6日----------//
public string BadWords = ConfigurationSettings.AppSettings["BadWords"];

//移除非法或不友好字符
private string CheckBadWords(string chkStr)
{
if (BadWords=="" || chkStr == "")
{
return "";
}

string[] bwords = BadWords.Split('#');
int i,j;
string str;
StringBuilder sb = new StringBuilder();
for(i = 0; i< bwords.Length; i++)
{
str=bwords[i].ToString().Trim();
string regStr,toStr;
regStr=str;
Regex r=new Regex(regStr,RegexOptions.IgnoreCase | RegexOptions.Singleline| RegexOptions.Multiline);
Match m=r.Match(chkStr);
if(m.Success)
{
j=m.Value.Length;
sb.Insert(0,"*",j);
toStr=sb.ToString();
chkStr=Regex.Replace(chkStr,regStr,toStr,RegexOptions.IgnoreCase | RegexOptions.Singleline| RegexOptions.Multiline);
}
sb.Remove(0,sb.Length);
}
return chkStr;
}
clon 2004-11-09
  • 打赏
  • 举报
回复
救命啊
clon 2004-11-09
  • 打赏
  • 举报
回复
楼上的提出用正则的仁兄们能不能写个式子出来?
webserv2 2004-11-08
  • 打赏
  • 举报
回复
自己有点把问题 弄复杂了, 可以直接用正则,呵呵!

有点想编译原理
yydy 2004-11-08
  • 打赏
  • 举报
回复
新上任的版主们 快来啊
bfwqc 2004-11-08
  • 打赏
  • 举报
回复
高深啊 为什么弄得这么复杂呢?
clon 2004-11-08
  • 打赏
  • 举报
回复
还是没有解决啊
morality 2004-11-06
  • 打赏
  • 举报
回复
呵呵,既然来了,还是帮你顶一下吧!:)
johnsunac 2004-11-06
  • 打赏
  • 举报
回复
直接使用正则表达式进行搜索,不需要自己写算法。
clon 2004-11-06
  • 打赏
  • 举报
回复
是个查询系统啊。
pingnt 2004-11-06
  • 打赏
  • 举报
回复
干嘛呢?在写操作系统还是在写数据库管理系统啊!
zhn0410 2004-11-06
  • 打赏
  • 举报
回复
占个位学习,并帮你顶一下。
shoutor 2004-11-06
  • 打赏
  • 举报
回复
真的是强啊
clon 2004-11-06
  • 打赏
  • 举报
回复
在VB.net版也有发贴,问题得到解决后两边都结贴

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧