一C++程序求助

来源:百度知道 编辑:UC知道 时间:2024/05/17 03:25:17
5个猴子摘了一堆桃子,约好第二天早上来分。第一只猴子来得早,它将桃子平分成5堆,多出一个,它把多出的一个吃了,把属于自己的一堆拿走了,将剩下的还混成一堆。其他猴子来了也正好按一样的方法处理。编程求出原来有多少个桃子。(用递归函数) (用C++编写)

***********************************************************
************************ 答案: 3121 ***********************
***********************************************************

思路一: (逆)
假设还有最后第6个猴子F,最后剩下给它的果子数为f=last(剩下的可能是f=0).
那么可知,E得到的果子数是:e=4*f(e为整数,因为果子数是整的),由这里可见: f是4的倍数!!!!!!!!!(注意这里,这是程序里f=0;f=f+4的原因!!)
于是 D 分到的果子数是:d=(5*e+1)/4;
同理:c=(5*d+1)/4; b=(5*c+1)/4; a=(5*b+1)/4 ;

思路二: (正)
假设分前的果子数为fisrt,A分到的果子数为a=(first-1)/5+1,这里可见(first-1)%5==0也就是5的倍数!!(因为果子数是整数)
b=(4*(a-1)-1)/5+1,同理,c=(4*(b-1)-1)/5+1,d=(4*(c-1)-1)/5,e=(4*(d-1)-1)/5+1

**********(到最后我们试着比较两个思路的出的程序各有什么优缺点??)**********

******************程序本身不多-注释挺详细******************

C++程序实现: (逆)
#include<iostream>
using namespace std;
int fenyu(int e,int n) ;
void main()
{
int f,n=5,first;
for(f=0;!(first=fenyu(f/4,n));f+=4) ;
cout<<"first="<<first<<endl<