|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天早上被一个朋友在QQ上问了一下小学数学题(也是公务员考试题),突然想用编程语言来解决一下这个问题。
问题的题目是这样的:
甲、乙两人在长30米的泳池内游泳,甲每分钟游37.5米,乙每分钟游52.5米,两人同时分别从泳池的两端出发,触壁后原路返回,如是往返。如果不计转向的时间,则从出发开始计算的1分50秒内两人共相遇了多少次?
首先考虑用C语言去解决这个问题,问题的关键在于怎么判定两个人是相遇了。仔细思考,可以分为两种情况,相遇与追击。
1. 相遇的话,可以理解称为两个人在本段内总共游过的路程相加等于30,或者是30的倍数,if((甲_里程 + 乙_里程)% 30 == 0)。
2. 追击的话,可以转变为速度快的人,比速度慢的人多走一个全程即30米,判定某时刻 甲_里程 + 30 = 乙_里程即可。
为了保证精确性,所有变量采用了浮点型。在编译的时候,发现C语言中,%运算符是不能对浮点数进行操作的。
故改用python,改写之后,发现所得结果与数学计算结果不同。数学运算结果应该为3,但是python代码计算为5.
下面附上C语言和python的代码,请大家帮我研究一下。- double a_speed = 0.625,b_speed = 0.875;
- double a_lc = 0,b_lc = 0;
- int meet_time = 0;
- double lc = 0;
- printf("甲_速度 = %f\n",a_speed);
- printf("乙_速度 = %f\n",b_speed);
- printf("经过计算\n");
- for (int i=0;i<110;i++)
- {
- a_lc += a_speed;
- b_lc += b_speed;
- lc = a_lc + b_lc;
- double temp;
- temp = lc % 30.0;
- if (!temp)
- {
- meet_time++;
- }
复制代码- a_speed = 0.625
- b_speed = 0.875
- print "甲的速度为%f",a_speed
- print "乙的速度为%f",b_speed
- i = 0
- a_lc = 0
- b_lc = 0
- lc = 0
- meet_times = 0
- for i in range(0,110):
- a_lc = a_speed + a_lc
- b_lc = b_speed + b_lc
- lc = a_lc + b_lc
- if((lc%30) == 0):
- meet_times = meet_times + 1
-
- print "相遇的次数为$d",meet_times
复制代码 |
|