程序设计实习第二讲内容摘要:

高峰不会落在同一天。 对于每个人,我们想知道何时三个高峰落在同一天。 对每个周期,我们都给出了某一个高峰出现的日子(用高峰日是当年的第几天表示, 1月 1日算第 0天 )。 现给定一个日子(也用当年的第几天表示),要求你输出从给定日子开始(不包括给定日子)下一次三个高峰落在同一天的时间(用距给定日子的天数来表示)。 例如:给定日子为当年第 10天 ,如果下次出现三个高峰同日的时间是当年第 12天 ,则输出 2(注意这里不是 3)。 生理周期 输入 输入四个整数: p, e, i和 d。 p, e, i分别表示体力 、 情感和智力高峰出现的日子 ( 即第 p天 , 第 e天和第 d天 )。 d 是给定的日子 ( 第 d天 ), 可能小于 p, e, 或 i。 d 是非负的并且小于 365, 数据保证 所求的日子会在第 21252 天前。 数据以一行 4个 1结束 输出 从给定日子起,下一次三个高峰同天的日子距离给定日子的天数。 生理周期 问题分析 令所求的时间为第 x天 , 则 x具有如下性质: 1) D x = 21252 2) (xp)%23=0 3) (xe)%28=0 4) (xi)%33=0 生理周期 一个最简单直观的做法就是枚举从 d+1 到 21252 之间所有的数字 , 寻找第一个满足条件 2) 3) 4) 的数字 , 注意输出时间减去 d.。 生理周期 可以做的进一步改进是从 d+1开始逐一枚举寻找满足条件 2 的数字 a, 从 a开始每步加 23寻找满足条件 3的数字 b( 这样的 b自然也满足条件 2 ), 然后再从 b开始每步加 23*28寻找满足条件 4 的数字 x(这样的 x同时满足条件 2,3)。 x就是我们要找的数字 , 输出时输出 xd。 生理周期 程序设计 // 读入 p, e, i, d // j从 d+1 循环到 21252, 如果 (jp)%23==0, 跳出循环 // j从上次跳出循环的值循环到 21252, 如果 (je)%28==0, 跳出循环 // j从上次跳出循环的值循环到 21252, 如果 (ji)%33==0, 跳出循环 // 输出 jd includeiostream //生理周期 using namespace std。 int main(){ int p,e,i,d,j,no=1。 cin p e i d。 while(p!=1 amp。 amp。 e!=1 amp。 amp。 i!=1 amp。 amp。 d!=1){ for(j=d+1。 j=21252。 j++) if ((jp)%23 == 0) break。 for(。 j=21252。 j=j+23) if ((je)%28 == 0) break。 for(。 j=21252。 j=j+23*28) if ((ji)%33 == 0) break。 cout Case no。 cout : the next triple peak occurs in。 cout jd days. endl。 cin p e i d。 no++。 } return 0。 } 6*9 = 42 对于十进制来说是错误的,但是对于 13进制来说是正确的。 即 , 6(13) * 9(13) = 42(13), 而 42(13。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。