发表于 2005-5-26 22:29

笨笨啊 发表于 2005-5-27 07:50

<P>最常规的作法:</P>
<DIV class=quote>
<P>.子程序 __启动窗口_创建完毕</P>
<P>求深1 (10, 2, 1)<br>求深1 (20, 3, 1)</P>
<P><br>.子程序 求深1<br>.参数 n, 整数型<br>.参数 u, 整数型<br>.参数 d, 整数型<br>.局部变量 t, 整数型</P>
<P>.如果真 (n ≥ u 且 n ≤ 100)' 判断条件<br>    .判断循环首 (n > 0)' 当总长度还是为0时进行循环<br>      n = n - u<br>      t = t + 1<br>      .如果真 (n > 0)' 未到地面<br>            n = n + d<br>            t = t + 1<br>      .如果真结束</P>
<P>    .判断循环尾 ()<br>    输出调试文本 (t)<br>.如果真结束</P></DIV>
<P>最后的输出是:</P>
<DIV class=quote>* 17<br>* 19<br></DIV>

[此贴子已经被作者于2005-5-27 7:50:56编辑过]

笨笨啊 发表于 2005-5-27 08:04

方法2

<DIV class=quote>
<P>.子程序 __启动窗口_创建完毕</P>
<P>求深1 (10, 2, 1)<BR>求深1 (20, 3, 1)<BR>求深2 (10, 2, 1)<BR>求深2 (20, 3, 1)</P>

<P>.子程序 求深1<BR>.参数 n, 整数型<BR>.参数 u, 整数型<BR>.参数 d, 整数型<BR>.局部变量 t, 整数型</P>
<P>.如果真 (n ≥ u 且 n ≤ 100)' 判断条件<BR>    .判断循环首 (n > 0)' 当总长度还是为0时进行循环<BR>      n = n - u<BR>      t = t + 1<BR>      .如果真 (n > 0)' 未到地面<BR>            n = n + d<BR>            t = t + 1<BR>      .如果真结束</P>
<P>    .判断循环尾 ()<BR>    输出调试文本 (t)<BR>.如果真结束</P>
<P><BR>.子程序 求深2<BR>.参数 n, 整数型<BR>.参数 u, 整数型<BR>.参数 d, 整数型<BR>.局部变量 t, 小数型</P>
<P>.如果真 (n ≥ u 且 n ≤ 100)' 判断条件<BR>    ' 设滑过的时间是t,则向上的时间为t+1,则<BR>    ' n=u*(t+1)-d*t<BR>    ' 所以t=(n-u)/(u-d)<BR>    ' T=2t+1<BR>    t = (n - u) ÷ (u - d)<BR>    .如果真 (t ≠ 四舍五入 (t, 0))' 如果t不是整数,则取大于此数的整数<BR>      t = 取整 (t) + 1<BR>    .如果真结束<BR>    t = 2 × t + 1<BR>    输出调试文本 (t)<BR>.如果真结束</P></DIV>

<P>正在编译现行易程序...<BR>正在预处理现行易程序...<BR>正在进行名称连接...<BR>正在统计需要编译的子程序<BR>正在编译“窗口程序集1”中的“__启动窗口_创建完毕”子程序<BR>正在编译“窗口程序集1”中的“求深1”子程序<BR>正在编译“窗口程序集1”中的“求深2”子程序<BR>正在生成主程序入口代码<BR>程序代码编译成功<BR>正在封装易格式目的代码<BR>开始运行被调试易程序<BR>* 17<BR>* 19<BR>* 17<BR>* 19<BR>被调试易程序运行完毕</P>

发表于 2005-5-27 15:45

发表于 2005-5-27 16:00

笨笨啊 发表于 2005-5-27 17:27

<DIV class=quote><B>以下是引用<I>枫</I>在2005-5-27 15:45:01的发言:</B><BR>
<P>笨笨,真佩服你写伪代码的技术,让人看了一目了然。</P></DIV>
<P>老实说,这不是伪代码。这是<STRONG>易语言</STRONG>的文本型代码,在IDE中查看是这个样子的。看帖图。

<P><BR></P>
<BR>

笨笨啊 发表于 2005-5-27 17:31

<DIV class=quote><B>以下是引用<I>枫</I>在2005-5-27 16:00:00的发言:</B><BR>
<P>我的算法和你不同,不过好像还你的算法好</P>
<P>以下是我用C++编写的一段代码</P>
<P>******************程序开始*****************************</P>
<P>#include <iostream.h></P>
<P>int main()<BR>{<BR>int n,u,d,climbs,minute;<BR>cin>>n;cin>>u;cin>>d;<BR>while(!(!n&&!u&&!d))<BR>{<BR>climbs=0;minute=0;<BR>while(1)<BR>{<BR>   if(minute%2==0)<BR>   { climbs=climbs+u;minute++;<BR>    if(climbs>=n) break;<BR>   }<BR>   else<BR>   { climbs=climbs-d;minute++;<BR>   }<BR>}<BR>cout<<minute<<endl;<BR>cin>>n;cin>>u;cin>>d;<BR>}</P>
<P>return 1;<BR>}</P>
<P>******************程序结束*****************************</P>
<P>我没有对n,u,d范围进行限制是因为ACM JudgeOnline系统提供的测试用例都是不会超过这个范围的。呵呵!</P></DIV>
<P>你是通过判断是第几分钟来判断是上升还是下降,这样判断的次数增加了(%的次数),呵呵,个人感觉,我的第二种算法是我所想到的最优算法了。第一种算法是较常规的算法,不过好像也比你的这个算法次数少</P>

发表于 2005-5-27 18:07

发表于 2005-5-27 18:16

笨笨啊 发表于 2005-5-27 22:21

<P><a href="http://www.dywt.com.cn" target="_blank" >http://www.dywt.com.cn</A></P>
<P>纯中文的内核,汉语编程中目前我看来是最强的一个,还有一个中蟒也不错,不过重在算法,简易上比不上易</P>
页: [1] 2
查看完整版本: 给大家一道程序题目做做