黑马程序员技术交流社区
标题:
一个卖西瓜的程序
[打印本页]
作者:
吴扬
时间:
2012-6-21 01:21
标题:
一个卖西瓜的程序
本帖最后由 吴扬 于 2012-6-22 00:42 编辑
学习完for循环,在一些资料上找了一些练习:有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完。
下面是我自己写的代码:
public class SaleWaterMelon {
public static void main(String[] args) {
saleWaterMelon();
}
public static void saleWaterMelon()
{
int sum = 1020;
int day = 0;
while(sum > 0)
{
sum = sum - (sum/2 +2);
System.out.println(sum);
day++;
}
System.out.println(day);
}
}
复制代码
运行的结果是8天,下面是正确的代码:
public class Prog1 {
public static void main(String[] args) {
int last=0;
last=1020/2+2;
int i=0;
for(i=1;last>=0;i++)
{
last=last-(last/2+2);
}
System.out.print("需要的天数:"+i);
}
}
复制代码
运行出来的结果确实9天,看了很久也没发现错误在哪。希望大家能帮我查看下吗?谢谢!
作者:
余银桂
时间:
2012-6-21 01:23
本帖最后由 余银桂 于 2012-6-21 02:13 编辑
我的答案也是八天
public class Test {
public static void main(String[] args) {
int last=0;
last=1020/2+2; //这里应该修改 与题目不符 第一天剩下的应该是 last = 1020/2-2;
int i=0;
for(i=1;last>=0;i++) //这里条件不满足后 i++了一次
{
System.out.println(last);
last=last-(last/2+2);
}
System.out.print("需要的天数:"+i); //所以这里得到的是 9天
}
}
复制代码
作者:
丁二跃
时间:
2012-6-21 01:32
本帖最后由 丁二跃 于 2012-6-21 01:37 编辑
public class Hello {
public static void main(String[] args) {
saleWaterMelon();
}
public static void saleWaterMelon()
{
int sum = 1020;
int day = 1;
while(sum > 0)
{
sum = sum - (sum/2 +2);
System.out.println(sum);
if(sum<=0)break;;//这里当你最后一天西瓜数已经是0了,虽然不会进入下次循环但是本次循环将继续执行天数将加1.所以应该加上判断
day++;
}
System.out.println(day);
}
}
复制代码
作者:
丁二跃
时间:
2012-6-21 01:34
丁二跃 发表于 2012-6-21 01:32
不太准确,这里判断条件应该是:sum<=0
作者:
王晓新
时间:
2012-6-21 01:35
本帖最后由 王晓新 于 2012-6-21 01:44 编辑
你的程序我运行出来是9天啊
刚才没看出来,正确结果应该是8天卖完
public class SaleWaterMelon {
public static void main(String[] args)
{
saleWaterMelon();
}
public static void saleWaterMelon()
{
int sum = 1020;
int day = 1;
while(sum > 0)
{
sum = sum - (sum/2 +2);
if(sum<=0)//只需要在这里加一条判断语句即可,不满足条件就跳出循环!
break;
day++;
}
System.out.println(day);
}
}
复制代码
作者:
李文龙
时间:
2012-6-21 01:52
下面的程序是错的,错误之处为 last=1020/2+2; 你想想这是什么,这是第一天卖的西瓜数目,也就是512个,对吧,而下面的for循环里面 last=last-(last/2+2); 这个是求还剩下多少个西瓜数目,那么,请问第一天卖了512个,还剩多少个,是508个,而for循环进行第一次的时候,last值为512,这跟题意不符,应该为508才对,我将 last=1020/2+2; 改为 last=1020/2-2; 程序运行,输出结果为 8天。
作者:
王明明
时间:
2012-6-21 09:33
本帖最后由 王明明 于 2012-6-21 09:59 编辑
public class Prog1 {
public static void main(String[] args) {
int last=0;
last=1020/2+2;//这里我觉得有问题 last应先赋值1020吧
int i=0;
for(i=1;last>=0;i++)
{
last=last-(last/2+2); }
System.out.print("需要的天数:"+i); //这里 for会在运行程序完了 i++ 但是你是从1开始加的 卖了8天的话 就等8+1=9天
}
}
复制代码
这是我改的
public class Democeshi {
public static void main(String[] args) {
int last=1020;
int i=0;
for(i=0;last>0;i++)
{
last=last-(last/2+2);
System.out.println(last);//可以看到每天卖剩下的西瓜 明了便于分析
}
System.out.print("需要的天数:"+i);
}
}
复制代码
作者:
燃烧端午
时间:
2012-6-21 10:34
修改过的
public static void main(String[] args) {
// int last=0;
int last=1020;
int i=0;
for(i=1;last>0;i++)//last等于零就跳出循环,
{
System.out.print("第"+i+"天还有"+last+"个西瓜 ");
System.out.println("第"+i+"天买掉"+(last/2+2)+"个");
last=last-(last/2+2);
if(last==0){
System.out.print("需要的天数:"+i); //这样写就避免最后i++了
}
}
}
复制代码
第1天还有1020个西瓜 第1天买掉512个
第2天还有508个西瓜 第2天买掉256个
第3天还有252个西瓜 第3天买掉128个
第4天还有124个西瓜 第4天买掉64个
第5天还有60个西瓜 第5天买掉32个
第6天还有28个西瓜 第6天买掉16个
第7天还有12个西瓜 第7天买掉8个
第8天还有4个西瓜 第8天买掉4个
需要的天数:8
这样看着不会迷糊
作者:
庄星睿
时间:
2012-6-21 12:03
先分析一下
卖掉西瓜数 剩余西瓜数 天数
1024 0 0 //注意不存在第0天的情况
510+2= 512 508 1
256 252 2
128 124 3
64 60 4
32 28 5
16 12 6
8 4 7
4 0 8
这样就比较清楚了剩余的西瓜数可以作为变量lastSum存在,而第一天就已经卖掉了512个,起始剩余数就是508个了,天数从1开始,就两个变量ok
我用了两种方法,实际上这里用while更好一些,代码更简单一些
class SailTest
{
public static void main(String[] args)
{
System.out.println(sailMelon(1020));
System.out.println(sailMelon_2(1020));
}
public static int sailMelon(int num)
{
int lastSum=num; //定义剩余西瓜数
int getDay=1; //西瓜卖的天数
while((lastSum=(lastSum-(lastSum/2+2)))>0) //只要剩余西瓜数大于0即可
{
getDay++;
}
return getDay;
}
public static int sailMelon_2(int num)
{
int lastSum=num; //定义剩余西瓜数
int day=1; //西瓜卖的天数
for (lastSum=lastSum-(lastSum/2+2);lastSum>0;)
{
day++;
lastSum=lastSum-(lastSum/2+2);
}
return day;
}
}
复制代码
作者:
吴扬
时间:
2012-6-22 00:40
本人觉得也是答案除了问题,用笔算了下,确实是第8天就卖完了,谢谢大家的解答了!
作者:
何旭栋
时间:
2012-6-22 01:14
for(i=1;last>=0;i++)
i 初始化有问题,天数应该由0开始
当 i==8 时刚好卖完西瓜,这时候运行一次 i++,接着判断last>0符合,退出循环,但这时候i已经是9了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2