送分100讨论题:一条算法问题的讨论

successhen 2009-03-29 08:23:35
有一条路共30公里,小明从一端起跑每小时跑10公里,小明的小狗从另一端起跑每小时15公里,当小狗碰到小明时又往回跑,跑回到起点后又向小明跑,如此重复,直到小明跑到终点,显示出小明与小狗相遇时,小明共跑了多少公里?
以下是我的答案,没验证过是否正确.有兴趣的朋友请贴出你的答案

string strOutput = "";
const int man = 10;
const int dog = 15;
const double L = 30;
double Pass = (L / (man + dog)) * man; //算出第一次相遇小明走过的路程
for (int i = 1; Pass < L; i++)
{
strOutput = "第" + i + "次相遇到小明走了" + Pass + "公里";
Console.Write(strOutput+"\n");
if (strOutput.EndsWith("30公里"))
{
break;
}
else
{
Pass = Pass + 10 * ((L - Pass) / 25); //算出相遇后,小狗跑回到起点时,小明共走过的路程
Pass = Pass + ((L - Pass) / (man + dog)) * 10; //算出小狗跑回终点时,又跑向小明直到相遇时,小明共走过的路程
}
}
Console.ReadLine();
}
...全文
358 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
018 2009-03-31
  • 打赏
  • 举报
回复
上面搞错。用笔算一下应该是
第01相遇:12
第02相遇:26.4
第03相遇:29.28



static void Main(string[] args)
{
int i = 0;
double sPeoson = 0;
double sSubPeoson = 30d / (10 + 15) * 10;
sPeoson += sSubPeoson;
Console.WriteLine("第" + (++i).ToString("d2") + "相遇:" + sSubPeoson.ToString("f14"));
while (sPeoson < 30d)
{
sSubPeoson = (30d - sPeoson) * 2 / (10d + 15) * 10;
if (sSubPeoson < Math.Pow(0.1, 14))
{
break;
}
sPeoson += sSubPeoson;
Console.WriteLine("第" + (++i).ToString("d2") + "相遇:" + sPeoson.ToString("f14"));
}
Console.ReadKey();
}



结果:
第01相遇:12.00000000000000
第02相遇:26.40000000000000
第03相遇:29.28000000000000
第04相遇:29.85600000000000
第05相遇:29.97120000000000
第06相遇:29.99424000000000
第07相遇:29.99884800000000
第08相遇:29.99976960000000
第09相遇:29.99995392000000
第10相遇:29.99999078400000
第11相遇:29.99999815680000
第12相遇:29.99999963136000
第13相遇:29.99999992627200
第14相遇:29.99999998525440
第15相遇:29.99999999705090
第16相遇:29.99999999941020
第17相遇:29.99999999988200
第18相遇:29.99999999997640
第19相遇:29.99999999999530
第20相遇:29.99999999999910
第21相遇:29.99999999999980
第22相遇:30.00000000000000
第23相遇:30.00000000000000
018 2009-03-31
  • 打赏
  • 举报
回复

static void Main(string[] args)
{
int i = 0;
double sPeoson = 0;
double sSubPeoson = 30.0 / (10 + 15) * 10;
Console.WriteLine("第" + (++i).ToString("d2") + "相遇:" + sSubPeoson.ToString("f14"));
while (sPeoson < 30)
{
sSubPeoson = (30 - sPeoson) * 2 / (10 + 15) * 10;
if (sSubPeoson < Math.Pow(0.1, 14))
{
break;
}
sPeoson += sSubPeoson;
Console.WriteLine("第" + (++i).ToString("d2") + "相遇:" + sPeoson.ToString("f14"));
}
Console.ReadKey();
}


结果:
第01相遇:12.00000000000000
第02相遇:24.00000000000000
第03相遇:28.80000000000000
第04相遇:29.76000000000000
第05相遇:29.95200000000000
第06相遇:29.99040000000000
第07相遇:29.99808000000000
第08相遇:29.99961600000000
第09相遇:29.99992320000000
第10相遇:29.99998464000000
第11相遇:29.99999692800000
第12相遇:29.99999938560000
第13相遇:29.99999987712000
第14相遇:29.99999997542400
第15相遇:29.99999999508480
第16相遇:29.99999999901700
第17相遇:29.99999999980340
第18相遇:29.99999999996070
第19相遇:29.99999999999210
第20相遇:29.99999999999840
第21相遇:29.99999999999970
第22相遇:29.99999999999990
第23相遇:30.00000000000000
第24相遇:30.00000000000000

结果比37楼多了第一次相遇的数据12
jikllisusu 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 aihai0 的回复:]
37楼结果有问题吧,第一次应该是12
[/Quote]
train0714 2009-03-31
  • 打赏
  • 举报
回复
38L很有意思。
aihai0 2009-03-31
  • 打赏
  • 举报
回复
37楼结果有问题吧,第一次应该是12
zhoulehua 2009-03-31
  • 打赏
  • 举报
回复
帮顶。
dyshadow 2009-03-31
  • 打赏
  • 举报
回复
有一条路共30公里,小明从一端起跑每小时跑10公里,小明的小狗从另一端起跑每小时15公里,当小狗碰到小明时又往回跑,跑回到起点后又向小明跑,如此重复,直到小明跑到终点,显示出小明与小狗相遇时,小明共跑了多少公里?

搞不懂...这要计算么?

小明跑了30公里啊`~~~
小狗跑了45公里啊~~~~


yueyebohe 2009-03-31
  • 打赏
  • 举报
回复
有意思~学习~
Z_L_H 2009-03-31
  • 打赏
  • 举报
回复
顶顶
冰凝瞬间1986 2009-03-31
  • 打赏
  • 举报
回复
string strOutput = "";
const double man = 10;
const double dog = 15;
const double L = 30;
double Pass = L / (man + dog) * man;
strOutput = "第1次相遇到小明走了" + Pass + "公里";
Console.Write(strOutput + "\n");
for (int i = 2; Pass < L; i++)
{
Pass = (L - Pass) / dog * man + Pass;
Pass = (L - Pass) / (man + dog)*man+Pass;
strOutput = "第" + i + "次相遇到小明走了" + Pass + "公里";
Console.Write(strOutput + "\n");
}
rightyeah 2009-03-31
  • 打赏
  • 举报
回复
汗一个
charles0525 2009-03-31
  • 打赏
  • 举报
回复
利用物理学知识想想,就是跑了30公理了!
yinxiaowei823 2009-03-31
  • 打赏
  • 举报
回复
接分
MOmo400 2009-03-31
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 zhangys7981 的回复:]
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
double p = 10, D = 15;
double d = 0;
double a = 30;
double pass;
int i = 0;
for (double b = 30; ;)
{

[/Quote]
liuchenglin_lcl 2009-03-31
  • 打赏
  • 举报
回复
看看
fenix124 2009-03-31
  • 打赏
  • 举报
回复
不是直接有公式了,傻
lchh0917 2009-03-31
  • 打赏
  • 举报
回复
JF~
anlianganl 2009-03-31
  • 打赏
  • 举报
回复
LS正解!
再说一下计算公式
Sn=24+3S(n-1)/15
liberpc 2009-03-30
  • 打赏
  • 举报
回复
确实没看到“每次”两字,只看到个“共”字
successhen 2009-03-30
  • 打赏
  • 举报
回复
都没看懂题目呀,我是说每次相遇呀,就是说每次相遇时候小明所走的路程,是每次!!!!!!
加载更多回复(38)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧