一道编程题——求解!!

小神zuo 2009-08-05 10:10:52
李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?(使用for循环结构编程实现)

小弟怎么也想不通,求高手讲解,先谢过了。
...全文
336 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
programmer2010 2009-08-06
  • 打赏
  • 举报
回复
北大青鸟的吧! 没记错的话应该是一道课后题!
zwn5555 2009-08-06
  • 打赏
  • 举报
回复
我是菜鸟,学习下
zyzzyh008 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xuchaoyou123 的回复:]
有歧义啊,遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒。
五遇花和店,到底是总共遇到5次,还是各五次呢??如果是各五次,那也得有个先后顺序问题啊》》


有最后的-喝光壶中酒,可知最后遇到的是花。在遇到花之前是什么呢?花还是店呢?
总之有问题:改为求整数解可能行。
[/Quote]
同问
小神zuo 2009-08-06
  • 打赏
  • 举报
回复
五遇花和店确实有歧义,两个意思都写下代码就行了。
GGMMYQL 2009-08-06
  • 打赏
  • 举报
回复
ggg
samihyypia 2009-08-06
  • 打赏
  • 举报
回复
题目有点意思
hongsheng11 2009-08-06
  • 打赏
  • 举报
回复
我连题都看的不太懂??
bigbug9002 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 programmer2010 的回复:]
北大青鸟的吧!  没记错的话应该是一道课后题!
[/Quote]

能不能给解一下题意?
小神zuo 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 programmer2010 的回复:]
北大青鸟的吧!  没记错的话应该是一道课后题!
[/Quote]
看来是青鸟出来的哈。。
石头城1575 2009-08-06
  • 打赏
  • 举报
回复
学习
hoof82 2009-08-05
  • 打赏
  • 举报
回复
学习了。
小神zuo 2009-08-05
  • 打赏
  • 举报
回复
倒过来想也确实容易多了,看来我的思维还得多锻炼锻炼,谢谢楼上的..
bigbug9002 2009-08-05
  • 打赏
  • 举报
回复
楼上说的对.
import java.util.*;
public class Test1{
public static void main(String[] args){
//josephus(8,3);
System.out.println(liBai());

}
public static float liBai(){
float x=0.0f;
for(int i=5;i>=1;i--){
x+=1;
System.out.println("第"+i+"次遇到花店前,壶中洒为:"+x);
x/=2;
System.out.println("第"+i+"次遇到酒店前,壶中洒为:"+x);
}
return x;
}
}

F:\java>java Test1
第5遇到花店前,壶中洒为:1.0
第5遇到酒店前,壶中洒为:0.5
第4遇到花店前,壶中洒为:1.5
第4遇到酒店前,壶中洒为:0.75
第3遇到花店前,壶中洒为:1.75
第3遇到酒店前,壶中洒为:0.875
第2遇到花店前,壶中洒为:1.875
第2遇到酒店前,壶中洒为:0.9375
第1遇到花店前,壶中洒为:1.9375
第1遇到酒店前,壶中洒为:0.96875
0.96875
blackhost 2009-08-05
  • 打赏
  • 举报
回复
其实,第五家必须是花店,就决定了第四家,决定了第四家,就决定了第三家,这个顺序是固定的迭代啊。

没有别的途径的。

因此写这个循环是容易的。
blackhost 2009-08-05
  • 打赏
  • 举报
回复
很简单啊!这是反推的过程,假设李白从第五家花店倒推回来的流程,最后酒壶数就是原来的酒量数。

那么,李白第一个碰上的必须是花,也就是正常顺序的第五家。

所以第一个wine=(wine+1)/2;

循环5次后,就得酒数了,有何想不通的?

小神zuo 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 blackhost 的回复:]

wine =(wine+1)/2;

[/Quote]

这个怎么理解??
blackhost 2009-08-05
  • 打赏
  • 举报
回复
double wine = 0;
for(int i=0;i<5;i++){
wine =(wine+1)/2;
System.out.println(wine);
}
小神zuo 2009-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yetaodiao 的回复:]
for(){
  if(){
  }else{

  }
}
遇店加一倍,见花喝一斗,五遇花和店

条件给的如此齐,楼主没敲代码吧?
[/Quote]
这个我知道啊,可是变量之间的关系搞不通,我是初学者,麻烦了。
我写的错误代码如下:
import java.util.*;
public class lilun4 {

/**
* @param args
*/
public static void main(String[] args)
{
int jiu=0;

Scanner input=new Scanner(System.in);
System.out.print("遇到h还是d?:");
String a=input.next();
for(int i=1;i<=5;i++)
{
if(a=="h")
{
jiu=jiu-1;
}
else if(a=="d")
{
jiu=jiu*2;
}
System.out.println(jiu);
}

}

}
  • 打赏
  • 举报
回复
for(){
if(){
}else{

}
}
遇店加一倍,见花喝一斗,五遇花和店

条件给的如此齐,楼主没敲代码吧?
shadow55 2009-08-05
  • 打赏
  • 举报
回复
public static float ramble() {

float wine = 1;

List<String> sign = new ArrayList<String>();
sign.add("flower");

for (int i = 0; i < 4; i++) {

int flag = (int) (Math.random() * 10) % 2;

// flower
if (flag == 0) {
wine = wine + 1;
sign.add("flower");
} else {
// shop
wine = wine / 2;
sign.add("shop");
}

}
System.out.print("step : ");
for(int i=1; i<=sign.size(); i++) {
System.out.print(sign.get(sign.size() - i) + "\t");
}

return wine;
}
加载更多回复(4)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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