一个简单的算法问题

zhaochanglong 2012-03-26 05:52:04
一块钱一瓶水 两个瓶子可以换一瓶水 给你100块钱 可以喝多少瓶水
用C# 实现
...全文
314 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hetengfei_ 2012-03-27
  • 打赏
  • 举报
回复
怎么这样的题也叫算法题,
在你的眼中,这样的东西也叫算法,

怪不得那么多人说[算法]只是用来装B 的手段!
cnwin 2012-03-27
  • 打赏
  • 举报
回复
但是实际生火种好象这种情况并不可能存在是吧?其实这个题目的关键是我们喝到的东西的价值只占整体价值的一半。所以老板就可以“搞活动”,拿瓶子换水喝。实际生活中的容器价值不可能站这么大的比例。
cnwin 2012-03-27
  • 打赏
  • 举报
回复
问题出在你是否最后可以借着瓶子。上面的答案是喝到199瓶水还剩一个瓶子(没法换了)。就像你说的,如果允许借的话,哪像老板佘一个空瓶换水,最后给老板那个空瓶也可以是200瓶。
Joychow 2012-03-27
  • 打赏
  • 举报
回复
理论是199瓶,实际可以200瓶,最后剩下的那个空瓶的时候,和老板借一个空瓶然后换一瓶水,喝了以后再把空瓶还给老板。
maguzi2008 2012-03-27
  • 打赏
  • 举报
回复
按上面有几位贴出的代码结果应当都是199瓶吧。但如果换一种思考方式:两个瓶子换一瓶水,这就相当于瓶子是0.5元一个。如果我从人家哪借来100元,然后全部买200瓶。喝完后出来200个瓶子,然后把瓶子(0.5元/个)换成钱,刚好是100元,然后还人钱。这不是200瓶吗?问题出在哪?
Joel_L 2012-03-27
  • 打赏
  • 举报
回复
学习了 啊 呵呵 虽然。。。。
  • 打赏
  • 举报
回复
Lz结贴是正道!楼上都答完了,LZ你还想得到什么样的答案你补充啊!
EIT王子 2012-03-27
  • 打赏
  • 举报
回复
想要什么样的解法啊。很多种的。

程序算法:

int kp=100;
int he=100;
int nhe=0;
do
{
nhe=kp/2;
he+=nhe;
kp=kp/2+kp%2;
}
while(kp>=2);
printf("%d\n",he);

ycproc 2012-03-26
  • 打赏
  • 举报
回复

这个问题好像出现过很多次了
lingjin520 2012-03-26
  • 打赏
  • 举报
回复
int nCount = money;
int nResult = 0;
nResult += nCount;

while (nCount > 1)
{
nCount -= 2;
nResult++;
nCount += 1;
}
Console.WriteLine(nResult);
lingjin520 2012-03-26
  • 打赏
  • 举报
回复
[code=c#]int nCount = money;
int nResult = 0;
nResult += nCount;

while (nCount > 1)
{
nCount -= 2;
nResult++;
nCount += 1;
}
Console.WriteLine(nResult);[/code]
Find_GF 2012-03-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bossikill 的回复:]

JScript code
<script type="text/javascript">
var howMuchBottle = 0;
function count(totalMoney) {
var i = 1;
while (i < totalMoney && i != totalMoney) ……
[/Quote]
正解
porschev 2012-03-26
  • 打赏
  • 举报
回复


int i = 100; //瓶子数
int sum = 0; //喝到多少瓶水
sum = i;
while (i > 1)
{
sum += i / 2;
i = i % 2 + i / 2;
}

bossikill 2012-03-26
  • 打赏
  • 举报
回复
<script type="text/javascript">
var howMuchBottle = 0;
function count(totalMoney) {
var i = 1;
while (i < totalMoney && i != totalMoney) {
howMuchBottle += Math.floor(totalMoney / i);
i *= 2;
}
return howMuchBottle++;
}

alert(count(20));
</script>
threenewbee 2012-03-26
  • 打赏
  • 举报
回复
确切地说是
int n = 100 / 1;
int result = n * 2 - 1;
stonespace 2012-03-26
  • 打赏
  • 举报
回复

int nPingZiCount=100;//每次瓶子的数目,最开始是100

int nResult=0;//可以喝的水数目

do
{
nResult+=nPingZiCount;
nPingZiCount=nPingZiCount/2;
}
while(nPingZiCount>0);

//结果在nResult中,
threenewbee 2012-03-26
  • 打赏
  • 举报
回复
int result = 100 * 2 - 1;

111,126

社区成员

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

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

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