| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3701 人关注过本帖
标题:[求助]关于猴子吃桃子的问题,和朋友争了好久
只看楼主 加入收藏
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 

这个问题的数学解应该是:首先设桃子的总数为Y,方程应该为 (((y/2-1)/2-1)/2-1·····)=1。可以从最后一天往前算
可以用利用类似递归的算法解。
#include <stdio.h>
int peach (int );
int main (void)
{
int days,sum;
days=1;
sum=peach ( days);
printf ("%d\n",sum);
return 0;
}
int peach (int n)
{
if (10==n)
return 1;
else
return ((peach (n+1)+1)*2) //前一天的桃子数
}


由于工作,N久都没来了!
2006-07-28 00:47
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

10 1
-----------
天 吃 剩
9 3 1
8 6 4
7 12 10
6 24 22
5 48 46
...
...
...
(3+6+12+24+48+......) + 1 就是總數, 前一部分是猴子吃的總數,
等比數列, 項數是 n天-1, 公比是 2, 首項是 3,
問題化爲: 首項爲 3, 公比爲 2, 項數是 n 的等比數列的和再加上 1 是多少?

sum = (3 - 3 * (2 ^ 9)) / (1-2) + 1
= -(3 - 3 * 512) + 1
= 3 * 511 + 1
= 1534

================
代碼:
void main(void)
{
int days = 10; // 比較有趣的半數問題
int sum = (3 - 3 * pow(2, days-1)) / (1-2) + 1;
printf("桃子總數: %d\n", sum);
system("PAUSE");
}

[此贴子已经被作者于2006-7-28 7:04:45编辑过]


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-07-28 03:26
lxs5216
Rank: 1
等 级:新手上路
帖 子:144
专家分:0
注 册:2006-2-3
收藏
得分:0 
12楼什么意思哦!太高深了
2006-07-28 09:00
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 
#include <stdio.h>
int main (void)
{
int peach_arry[11]; //用一个数组来统计每天的桃子
unsigned int days;
for (peach_arry[10]=1,days=9;days>=1;days--)
peach_arry[days]=(peach_arry[days+1]+1)*2;
printf ("days: peach:\n");
for (days=1;days<=10;days++)
printf ("%d %4d\n",days,peach_arry[days]); //列表显示桃子数
return 0;
}

由于工作,N久都没来了!
2006-07-28 10:04
cl_colin
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-7-17
收藏
得分:0 
同意10楼的

Learing...
2006-07-28 10:14
xiao3949
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2006-5-30
收藏
得分:0 

正确答案是1534个,10楼的对了~

2006-07-28 11:21
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 

十二楼的数学思想很好。分析的角度很好,找到的规律很棒。顶
我也喜欢数学,但是可惜没有学好。


2006-07-28 12:13
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
我也写一个,
#include<stdio.h>
#include<conio.h>
int main()
{
static int sum=1,i=1;
i==10?(printf("%d",sum),getch()):(i++,sum=(sum+1)*2,main());
}

对不礼貌的女生收钱......
2006-07-28 13:17
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

我是 12 樓的, 有甚麽不對呀. (剛才打錯了,)

一個正整數 y,
第一次 y / n, 再減去 k, 得到 r1
第二次 r1 / n, 再減去 k, 得到 r2
第三次 r2 / n, 再減去 k, 得到 r3
...
..
第m 次 r[m-1] / n, 再減去 k, 最終剩餘 rm

在這個問題中, y 是要求的總數, k 是已知的 1, m 是已知的 10, rm(最終剩餘的)是已知的 1
即 求 y, k=1, m=10, r=1

通用公式 y = (a1 - a1 * (n ^ (m-1))) / (1 - n) + rm
其中 a1 = (rm + k) * n - k

對於猴子問題, a1 = (1 + 1) * 2 - 1 = 3
==========================================
==========================================
==========================================
[問題擴展]:
一個猴子吃桃子, 第 1 天吃了桃子總數的 1/n 再多 k 個,
第 2 天又吃了剩下的 1/n 再多 k 個,
...
...
..
第 m 天後, 桃子還剩下 rm 個
求這堆桃子有幾個??


[解答]
設桃子總數爲 y, 第 (m - 1) 天吃的爲 a1
第m 天沒吃, 所以 a1 = (rm + k) * n - k
則 y = (a1 - a1 * (n ^ (m-1))) / (1-n) + rm
[程式解答]
void main(void)
{
int y; // 總數 (未知)
int a1; // 第 m-1 天吃的數量 (未知, 易求得)
int rm; // 剩餘數量 (已知)
int n; // 每次吃的百分比, 如果吃 1/2, 則 n=2; 如果吃 1/3, 則 n=3....... (已知)
int k; // 每次多吃的個數
int m; // 第幾天 (已知)

printf("輸入最後剩餘的數量:");
scanf("%d", &rm);
printf("輸入每次吃的百分比, 1/2 爲 2, 1/3 爲 3, ...:");
scanf("%d", &n);
printf("輸入每次多吃的個數:");
scanf("%d", &k);
printf("輸入現在是第幾天:");
scanf("%d", &m);

a1 = (rm + k) * n - k;

if(((a1+k) % n)!=0)
{
printf("輸入不合理.");
system("PAUSE");
return;
}
y = (a1 - a1 * pow(n, (m-1))) / (1-n) + rm;

printf("\n這堆桃子共有 %d 個.", y);
system("PAUSE");
}
-----
執行示例:
輸入 1
2
1
10
輸出 1534
========
我還是認爲這是一個等比數列求和的問題~~~

[此贴子已经被作者于2006-7-28 13:28:07编辑过]


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-07-28 13:21
redstar00
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-19
收藏
得分:0 
#include<stdio.h>
int fac(int n)
{
int sum;
if(n==10)
{
sum=1;
}
else
{
sum=2*(fac(n+1)+1);
}
return (sum);
}
int main()
{
printf("%d",fac(1));
return 0;
}
2006-07-28 15:49
快速回复:[求助]关于猴子吃桃子的问题,和朋友争了好久
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012817 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved