首页
社区
课程
招聘
看看这个古典的题目
发表于: 2007-10-3 20:23 4850

看看这个古典的题目

2007-10-3 20:23
4850
* 五只猴子采得一堆桃,它们约定次日早起来分。半夜里,一只猴子偷偷起来,把桃均分成五堆后,
* 发现还多一个,它吃了这桃子,拿走了其中一堆。第二只猴子醒来,又把桃子均分成五堆后,
* 还是多了一个,它也吃了这个桃子,拿走了其中一堆。第三只,第四只,第五只猴子都依次如此做了。
* 问桃子数最少有多少个?
* 要求:(1)使用面向对象编程! (2)使用递归的方法编写!

在网上看了一下,答案真是五花八门,竟然没有一个正确的!!!
先别说按要求回答,就说个正确结果吧。

提示:
  五只猴子,每分一次,都会出现什么?
  第一:分之前,应该 对 5取余的结果是1,
  第二:拿走自已的一份,并多拿一个后,对4求余应该是0

   不存在小数的问题,有很多答案居然出现小数,晕,难不成树上还有0.5个桃?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
2
数学不好
2007-10-3 22:22
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
3
exp(5*ln(5))-4

某人帮忙找到的解法,发现是一个蛮难的数学题(个人认为)
2007-10-3 22:35
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
4
pathleboy给的代码(我数学太烂,不会写

function calc():integer;
var
  x : integer;
  s : real;
begin
x := 1;
  while True do
begin
  s  := ((((x * 5 + 1)* (5/4) + 1)*(5/4)+1)*(5/4)+1)*(5/4)+1;
   if s = Trunc(s) then
  begin
    result := Trunc(s);
    exit;
  end;
   inc(x);
  end;
end;
2007-10-3 22:50
0
雪    币: 2899
活跃值: (1753)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
#include<iostream.h>

int main(int argc, char* argv[])
{
        int i;
        int j;
        int sum;
        for(i=25;i<6000;i++)
        {
            sum=i;
           for(j=0;j<5;j++)
           {
             if(sum%5==1)
             {
               sum-=1;
               sum=sum/5*4;
             }
             else break;     //五次分配正确无误,j一定会增长到5
           }
           if(j==5)
           break;
        }
        if(j==5)
        cout<<"桃的总数是:"<<i<<endl;
        system("PAUSE");
        return 0;
}

也不是面向对象的解法,结果输出:3121
2007-10-4 07:27
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
6
单纯的数学问题
2007-10-4 15:11
0
雪    币: 248
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
QueryPeach proc uses ebx ecx edx esi edi MonkeyNum:DWORD
Local dwRetValue:dword

mov esi,1
xor edi,edi
.while esi >= 1
mov dwRetValue,esi
push esi
.repeat
xor eax,eax
xor edx,edx
mov eax,esi
dec eax
mov ebx,MonkeyNum
div ebx
.if edx==0
mov ecx,MonkeyNum
dec ecx
mov ebx,ecx
mul ebx
mov esi,eax
.else
mov edi,0
.break
.endif
inc edi
.until edi == MonkeyNum
.if edi >= MonkeyNum
.break
.endif
pop esi
inc esi
.endw
invoke wsprintf,addr outbuf,S("%d"),dwRetValue
invoke SetDlgItemText,hMain,IDC_OUTPUT,addr outbuf
ret

QueryPeach endp

至少的桃子总数:5*624+1=3121
一、
第一只猴子吃一个后剩余3121-1=3120
第一只猴子分5堆:5*624=3120
第一只猴子拿走自己的一堆后剩余4*624=2496
二、
第二只猴子吃一个后剩余2496-1=2495
第二只猴子分5堆:5*499=2495
第二只猴子拿走自己的一堆后剩余4*499=1996
三、
第三只猴子吃一个后剩余1996-1=1995
第三只猴子分5堆:5*399=1995
第三只猴子拿走自己的一堆后剩余4*399=1596
四、
第四只猴子吃一个后剩余1596-1=1595
第四只猴子分5堆:5*319=1595
第四只猴子拿走自己的一堆后剩余4*319=1276
五、
第五只猴子吃一个后剩余1276-1=1275
第五只猴子分5堆:5*255=1275
第五只猴子拿走自己的一堆后剩余4*255=1020
2007-10-4 23:35
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
8
#include <stdio.h>

int GetX(int n)
{
	int x;
	static int s;

	if (n == 1)
	{
		s = 1;
		x = 1;
	}
	else
	{
		x = GetX(n-1);
		s *= 5;
		x += s * 4;
	}

	return x;
}

int main(int argc, char* argv[])
{
	printf("\n桃子总数:%d\n",GetX(5));

	return 1;
}


好玩  好玩
2007-10-7 18:29
0
雪    币: 2559
活跃值: (176)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
5**5+5**4+5**3+5**2+5**1+5**0
2007-10-8 10:51
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
//用了遞歸 但是沒用面向對象

//猴子1 全部桃子 分成5份 吃掉一個 拿走1/5
//猴子2 剩下的桃 分成5份 吃掉一個 拿走1/5
//猴子3 剩下的桃 分成5份 吃掉一個 拿走1/5
//猴子4 剩下的桃 分成5份 吃掉一個 拿走1/5
//猴子5 剩下的桃 分成5份 吃掉一個 拿走1/5
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  for i:=1 to 10000 do    //從1-10000嘗試桃子
  begin
    flag:=false;          //全局變量
    fentao(i,5);
    if flag then
    begin
      showmessage(inttostr(i));
      exit;
    end;
  end;
end;

procedure TForm1.fentao(itaozi, ituzi: integer);
begin
  if ituzi=0 then
  begin
     flag:=true;
     exit;
  end;
  if ((itaozi-1)mod 5)=0 then    //桃子總數為去掉一個後,可以平分為5份
  begin
    itaozi:=round((itaozi-1)/5)*4; //小猴子動過手腳後,所剩桃子總數
    if ituzi>0 then
      fentao(itaozi,ituzi-1);     //繼續動手腳
  end;
end;
2007-10-8 16:08
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
11
看那两个要求感觉是在帮他做作业
明明是口算题,还非用什么面向对象和递归啊
2007-10-8 16:52
0
雪    币: 253
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
12
面向对象的要求是不是决定了不能使用汇编语言编程?
2007-10-8 21:23
0
游客
登录 | 注册 方可回帖
返回
//