C++题目:递归法解猴子吃桃子问题!
以下是题目和我的解法,到底哪里错了?C++达人帮帮忙!/*猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。...
以下是题目和我的解法,到底哪里错了?C++达人帮帮忙!
/*猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又
多吃了一个。以后每天早上都吃了前一天剩下的一半另加
一个。到第10天早上想再吃时,就只剩下一个桃子了。求
第一天共摘了多少桃子?*/
#include<iostream.h>
int divide(int n)
{
int i=1;
if(n%2&&n==1)return i;
else{
n=n/2-1;
i++;
divide(n-1);
}
}
void main()
{
for(int i=2;i<10000;i+=2){
if(divide(i)==10){
cout<<i;
break;
}
}
}
我是希望大家看看我的解法哪出问题了!跪谢!!! 展开
/*猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,
又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又
多吃了一个。以后每天早上都吃了前一天剩下的一半另加
一个。到第10天早上想再吃时,就只剩下一个桃子了。求
第一天共摘了多少桃子?*/
#include<iostream.h>
int divide(int n)
{
int i=1;
if(n%2&&n==1)return i;
else{
n=n/2-1;
i++;
divide(n-1);
}
}
void main()
{
for(int i=2;i<10000;i+=2){
if(divide(i)==10){
cout<<i;
break;
}
}
}
我是希望大家看看我的解法哪出问题了!跪谢!!! 展开
展开全部
你这个程序是错的
按照你的思路
第四行int i=1;
应该为全局变量(估计也会很麻烦)或者从根本上解决,将divide函数参数变为(int i,int n)
用n来控制桃子总数,用i来控制分配次数
还有
你没有限制n的大小
n可能会小于零的
还有很多其他的小问题
导致这个程序从根本上就有纰漏
我根据你的想法,做出了一个程序
望指正
#include<iostream.h>
int monkey(int i,int j)
{
if(i==1)return j;
else{
if(i>1){
i=i/2-1;
j++;
monkey(i,j);
}
else return 0;
}
}
void main()
{
for(int i=2;;i+=2){
int j=1;
if(monkey(i,j)==10){
cout<<i<<endl;
break;
}
}
}
按照你的思路
第四行int i=1;
应该为全局变量(估计也会很麻烦)或者从根本上解决,将divide函数参数变为(int i,int n)
用n来控制桃子总数,用i来控制分配次数
还有
你没有限制n的大小
n可能会小于零的
还有很多其他的小问题
导致这个程序从根本上就有纰漏
我根据你的想法,做出了一个程序
望指正
#include<iostream.h>
int monkey(int i,int j)
{
if(i==1)return j;
else{
if(i>1){
i=i/2-1;
j++;
monkey(i,j);
}
else return 0;
}
}
void main()
{
for(int i=2;;i+=2){
int j=1;
if(monkey(i,j)==10){
cout<<i<<endl;
break;
}
}
}
推荐于2017-09-10 · 知道合伙人旅游行家
关注
展开全部
这是用递归做的:
#include "stdio.h"
int fun(int);
main()
{
int count;
count=fun(1);
printf("count=%d\n",count);
}
int fun(int day)
{
if(day==10)
return 1;
else
return (fun(day+1)+1)*2;
}
#include "stdio.h"
int fun(int);
main()
{
int count;
count=fun(1);
printf("count=%d\n",count);
}
int fun(int day)
{
if(day==10)
return 1;
else
return (fun(day+1)+1)*2;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//递归法解猴子吃桃子问题
#include <stdio.h>
#define DAY 3
#define PEACH 4
int arr[DAY] ;
long int times ;
FILE *fp ;
void eat( int day, int peach, int idx )
{
if ( day > 0 && peach >= 0 )
{
int i, i_end ;
i_end = ( (peach<10) ? (peach) : (10) ) ;
for ( i = 0 ; i <= i_end ; i++ )
{
arr[idx] = i ;
eat( day-1, peach-i, idx+1 ) ;
}
return ;
}
else if ( day == 0 && peach == 0 )
{
int i ;
times++ ;
fprintf( fp, "%-10ld:", times ) ;
for ( i = 0 ; i < DAY ; i++ )
fprintf( fp, "%-3d ", arr[i] ) ;
fprintf( fp, "\n" ) ;
return ;
}
else
return ;
}
int main( void )
{
int day, peach ;
day = DAY ;
peach = PEACH ;
times = 0 ;
fp = fopen( "monkey.txt", "w" ) ; /* 打开用于保存结果的文件 */
eat( day, peach, 0 ) ;
fclose( fp ) ; /* 关闭文件 */
return( 0 ) ;
}
#include <stdio.h>
#define DAY 3
#define PEACH 4
int arr[DAY] ;
long int times ;
FILE *fp ;
void eat( int day, int peach, int idx )
{
if ( day > 0 && peach >= 0 )
{
int i, i_end ;
i_end = ( (peach<10) ? (peach) : (10) ) ;
for ( i = 0 ; i <= i_end ; i++ )
{
arr[idx] = i ;
eat( day-1, peach-i, idx+1 ) ;
}
return ;
}
else if ( day == 0 && peach == 0 )
{
int i ;
times++ ;
fprintf( fp, "%-10ld:", times ) ;
for ( i = 0 ; i < DAY ; i++ )
fprintf( fp, "%-3d ", arr[i] ) ;
fprintf( fp, "\n" ) ;
return ;
}
else
return ;
}
int main( void )
{
int day, peach ;
day = DAY ;
peach = PEACH ;
times = 0 ;
fp = fopen( "monkey.txt", "w" ) ; /* 打开用于保存结果的文件 */
eat( day, peach, 0 ) ;
fclose( fp ) ; /* 关闭文件 */
return( 0 ) ;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是个c的题目呀!
蛮简单的
蛮简单的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询