调皮的小孩.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
调皮的小孩

调皮的小孩 【问题描述】 一群小孩在草坪上玩游戏,十分开心,一个喜欢猎奇的过路人走过来问他们: “孩子们,你们在玩什么游戏呢?” “我们中有一个人当裁判,剩下的人分成两队:星星队有N个人,月亮队有M个人。如果你猜对了谁是裁判,我就告诉你玩的是什么游戏。” “好啊。不过,总得给我点提示吧?” “那当然。你可以问我们某人是不是属于某队,而不能问某人是不是裁判。被问到的星星队的队员总是告诉你正确的答案;月亮队的队员总是告诉你错误的答案;而裁判,在你向他问奇数次的时候他会告诉你正确的答案,偶数次的时候会告诉你错误的答案。” “哦,明白了。可以随便提问题吗?” “你不许问任何人关于他自己的问题。例如,你不许问我:‘你是不是星星队的?’你也不能向任何一个人询问两次关于同一个人的问题。例如,你曾问过我丁丁是不是星星队的,你就不能再问我丁丁是不是月亮队的。最后,请你尽量不要问同一个人太多的问题,因为他还要接着玩呢,没时间老回答你的问题。” 过路人很聪明,不仅猜出了谁是裁判,还说出了剩下的每个人是哪个队的。你也来试试吧! 【交互】 本题是一道交互式题目,你的程序应当和测试库进行交互,而不得访问任何文件。测试库提供三个函数:GetNM,Ask,Answer,它们的作用和用法如下: GetNM(N,M)必须首先调用,用它来获得正整数N,M的值。(2=N+M=500)。 Ask(Child1,Child2,T)的作用是询问。其中1=Child1,Child2=N+M+1,且Child1≠Child2。T非0即1,T为0表示星星队,为1表示月亮队。即询问小孩Child1“小孩Child2是不是属于T队”。若函数返回1,表示Child1回答说“是”;若函数返回0,表示Child1回答“否”。 Answer(Ans)用来告诉测试库你猜的答案。参数Ans的值为0,1,2。为0表示星星队,为1表示月亮队,为2表示裁判。你应当连续调用N+M+1次本过程,从1号开始到N+M+1号为止依次说明每个小孩的角色,注意仅有一个裁判。调用完N+M+1次本过程后,测试库会终止你的程序,切记你的程序不得自行终止。 【一个成功交互的例子】 函数调用 返回值 说明 GetNM(N,M) N=1, M=1 星星队和月亮队各有一名队员 Ask(1,2,0) 0 问小孩1:“小孩2是不是星星队的?”答:“否” Ask(2,1,0) 1 问小孩2:“小孩1是不是星星队的?”答:“是” Ask(3,1,1) 0 问小孩3:“小孩1是不是月亮队的?”答:“否” Answer(2) 无 小孩1是裁判。 Answer(1) 无 小孩2是月亮队的。 Answer(0) 无 小孩3是星星队的。 【对Pascal程序员的提示】 你的程序应当使用下列语句引用测试库: uses childlib; 测试库提供的函数/过程原型为: procedure GetNM(var N,M:integer); function Ask(Child1,Child2,T:integer):integer; procedure Answer(Ans:integer); 【对C/C++程序员的提示】 你应当建立一个工程,把文件childlib.o包含进来,然后在程序头加上一行: #include “childlib.h” 测试库提供的函数原型为: void GetNM(int *N, int *M); int Ask(int Child1, int Child2, int T); void Answer(int Ans); 【评分方法】 如果你的程序有下列情况之一,得0分: 访问了任何文件(包括临时文件)或者自行终止; 非法调用库函数; 让测试库异常退出。 否则每个测试点你的得分按这样来计算: 你只猜对了裁判是谁而没有完全猜对其余孩子所在的队。在这种情况下,如果你对某个小孩提了三个以上(含三个)的问题,那么你只能得40%的分,否则可以得60%的分; 你猜对了裁判是谁以及其余所有孩子所在的队。在这种情况下,如果你对某个小孩提了三个以上(含三个)的问题,那么你只能得70%的分,否则你将得到该测试点的满分。   【你如何测试自己的程序】 在工作目录下建立一个文本文件child.in,文件第一行包括两个整数N,M,第二行包括N+M+1个数(数的取值为0,1,2),第k个数为小孩k所在的队,0表示星星队,1表示月亮队,2表示裁判。样例输入文件存放在用户目录中。 执行你的程序,此时测试库会产生输出文件child.log。 如果程序正常结束,child.log的第一行包含一个整数P,即被询问次数最多的小孩被问了多少次(超过10次的按10

文档评论(0)

asd522513656 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档