读书人

兄弟们!猴子吃桃的有关问题 求解

发布时间: 2012-02-07 17:45:36 作者: rapoo

兄弟们!猴子吃桃的问题 求解!
原题是这样的   一个猴子摘了若干的桃子  第一天吃了一半加半个桃子,第2天吃了剩下的一半加半个,第三天又吃了第2天剩下的一半加半个  正好全部吃完  问 第一天摘了多少桃子


我的程序如下

#include "stdio.h "
main()
{
int sum,i;
for (i=3;i> 1;i--)
{
sum=sum*2+1/2;
}
printf ( "%d ",sum);
}


得出的结果出乎意料的大 请问各位高手 这个题的逻辑思路应该是怎样? 谢谢!

[解决办法]
程序如下,可以计算任意天的桃子数

#include <iostream>
using namespace std;

float sum(float);

int main()
{
float total;
total=sum(3); //如果需要计算任意天的桃子数,改变实参值即可
cout < < "The number of peaches is: " < <total < <endl;
system( "pause ");
return 0;
}

float sum(float i)
{
if(i!=1)
i=sum(i-1);
else if(i==1)
return i;
i+=0.5;
i*=2;
return i;
}
[解决办法]
看出来了,楼主想要一个程序思想
其实很多逻辑编程题目,最好不要加入太多的人为思考,想提高编程水平,尽量少量的人为逻辑,让计算机去思考,这个猴子吃桃题目,其实可以引申为第n天才吃完,让计算机从最后一天的结果去分析。

程序如下:

#include <iostream.h>
void main()

{
//分析 昨天吃剩下的+今天吃的 =今天吃后剩下的
//昨天剩下的是今天剩下的2倍多1个
double lefttoday = 0;//今天吃后剩下的
double eattoday;//今天吃的
double leftyestoday;//昨天吃剩下的
double total;//总数
int n;//天数

cout < < "输入吃的天数: ";
cin> > n;
cout < <endl;

for(int i=1; i <=n; i++)
{
leftyestoday = (lefttoday + 0.5)*2;
eattoday = leftyestoday/2.0 + 0.5;
cout < < "第 " < <n-i+1 < < "天的情况: " < <endl;
cout < < "原来有: " < <leftyestoday < <endl;
cout < < "吃了: " < <eattoday < <endl;
cout < <endl;

lefttoday = leftyestoday;
}
cout < < "第一天的桃子总数为: " < <int(leftyestoday) < <endl;
cin> > n;

}


运行结果为:

输入吃的天数:4

第4天的情况:
原来有:1
吃了:1
剩下:0

第3天的情况:
原来有:3
吃了:2
剩下:1

第2天的情况:
原来有:7
吃了:4
剩下:3

第1天的情况:
原来有:15
吃了:8
剩下:7

第一天的桃子总数为:15


强烈建议关注程序的可读性,以及代码规范性,以及亲和度,想成为编程高手,从开始就要注意细节

读书人网 >C++

热点推荐