合肥
合肥奥数网

合肥站
奥数网

信息学编程语言教程二:顺序结构程序与基本数据类型(2)

合肥奥数网整理 2012-12-13 15:24:15

  [例1.8]分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少?

  解:设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法,从最后结果入手,按反相顺序,分步骤推算出每次各人当时的钱数:(在每个步骤中,各人钱数分别存在A、B、C中)

  步骤①:A=8B=8C=8{这是最后结果的钱数,三人都一样多}

  步骤②:A=A/2(=4)B=B/2(=4)C=A+B+C(=16){A,B未得到丙分给的钱时,只有结果数的一半;C应包含给A,B及本身数三者之和}

  步骤③:A=A/2(=2)C=C/2(=8)B=A+B+C(=14){A,C未得到乙分给的钱时,只有巳有数的一半;B应包含给A,C及本身数三者之和}

  步骤④:B=B/2(=7)C=C/2(=4)A=A+B+C(=13)

  C未得到甲分给的钱时,只有巳有数的一半;A应包含给B,C及本身数三者之和}

  步骤⑤:输出A(=13)B(=7)C(=4){此时的A,B,C就是三人原先的钱数}

  Pascal程序:

  ProgramExam18;

  Vara,b,c:integer;

  Begin

  a:=8;b:=8;c:=8;{对应于步骤①}

  a:=adiv2;b:=bdiv2;c:=a+b+c;{对应于步骤②}

  a:=adiv2;c:=cdiv2;b:=a+b+c;{对应于步骤③}

  b:=bdiv2;c:=cdiv2;a:=a+b+c;{对应于步骤④}

  Writeln('a=',a,'':4,'b=',b,'':4,'c=',c);{输出}

  Readln

  End.

  细心观察,会发现本程序语句的顺序很关键。此例用反推顺序(逆序),按步骤正确推算出各变量的值。当然,有的问题可按正序步骤编程,这类程序都称为顺序程序。

  本程序Writeln语句的输出项含有('':4),这里的冒号用来指定该项显示所占宽度,此处是输出4个空格即(空格项占4格)。

首页 上一页 下一页 尾页

相关推荐

点击查看更多
重点初中
首页 导航