㈠ c语言,猴子吃桃子代码求注释
哥们好,我来解释解释哈
这个程序是倒着分析的:首先说的是s[n]为第n只猴子走后,留给其他每个猴子的桃子的数目。(当然猴子都不知道前面的猴子已经拿过了),所以剩余桃子是s[5]*4,就是第五只猴子给其他每只猴子留下的桃子数目乘以4。
倒着推,第五只猴子先多吃了一个,再平分5份,并吃掉了自己的一部分,那么留下的s[5]其实肯定是4的倍数【这段代码其实可以优化一下】则留下的s[5]*5并加上1,就是第4个猴子留下的桃子总数,然后看下是否是4的倍数,因为这是第四个猴子留下的准备给其他4个猴子的桃子,肯定是4的倍数啦,如果不是就说明错误咯,,然后这个数再除以4,再乘以5,再加上1,就是第三只猴子留下的桃子总数,那肯定也是4的倍数啦。
以此类推,就能推到第一只猴子时的桃子数什么的,总数什么的,都出来啦
如果上面意思弄懂了,现在就说程序本身,先假设s[5]为1,然后看s[5]*5+1【就是第四只猴子留下的桃子数目】是否能被4整除,如果不能,就直接跳出循环,假设s[5]为2,再看s[5]*5+1能否被4整除,如果能被整除,就得到s[4]的值,【就是你 “s[4]
/=
4;
//想知道这代码有什么用”的这段代码的意思】再乘以5,然后再加上1,就是第三只猴子留下的桃子数目,再看这个能否被4整除,如果不能,就直接跳出循环,再重新来啦
一直到s[1],最后s[0]就是所谓的总数目啦,
懂了吧,朋友?还没懂的话
就再继续探讨探讨哈
欢迎
㈡ 大神帮忙解决C语言猴子吃桃的问题
#include<stdio.h>
intmonkey_eat_peach(intday,intn,intm){//猴子吃桃递归算法
intpeach;
if(day==n)
{
peach=1;
printf("第%d天,有%d个桃子 ",day,peach);
returnpeach;
}else{
peach=(monkey_eat_peach(day+1,n,m)+1)*2;
printf("第%d天,有%d个桃子 ",day,peach);
}
returnpeach;
}
intmain(){
intn,m;//nm的值你可选择由程序运行时再输入
n=10;
m=1;
monkey_eat_peach(1,n,m);
return0;
}
㈢ c语言猴子吃桃子问题怎么做
1、打开visual C++ 6.0-文件-新建-文件-C++ Source File
㈣ C语言猴子吃桃
#include <stdio.h>
int main(void)
{
int i, peach;
peach=1;
scanf("%d",&i);
while(i>1)
{
i--;
peach=(peach+1)*2;
}
printf("%d\n", peach);
}
程序如上,
你可以输入第i天发现桃子数为1.
例如:你输入
10
结果是
1534
你说的
1023
肯定是不对的,因为它都是一半后多吃1个,应该是偶数。
上面的程序,正是你题目的逆向死维,没有用递归。
㈤ 请用C语言编写一个程序,“猴子吃桃”问题
如果真是吃到了第10天,我想说这TMD还是猴子吗?第一天就会撑死!
C代码在线运行工具
#include<stdio.h>
intmain()
{
intday=10;
intsum=0;
inti=0;
sum=1;
for(i=day;i>=1;i--)//吃之后算法
{
sum=(sum+1)*2;
}
printf("第%d天吃之后还剩1个,最初有%d个桃子,",day,sum);
printf("第1天吃了%d个桃子; ",sum/2+1);
sum=1;
for(i=day-1;i>=1;i--)//吃之前算法
{
sum=(sum+1)*2;
}
printf("第%d天吃之前还剩1个,最初有%d个桃子,",day,sum);
printf("第1天吃了%d个桃子。 ",sum/2+1);
return0;
}
第 10 天吃之后还剩1个,最初有 3070 个桃子,第 1 天吃了 1536 个桃子;
第 10 天吃之前还剩1个,最初有 1534 个桃子,第 1 天吃了 768 个桃子。
㈥ 第六题猴子吃桃,要完程序,初学C语言
猴子吃桃的C语言递归程序如下:
#include<stdio.h>
intf(intn);
intmain()
{
printf("%d",f(1));
return0;
}
intf(intn)
{
if(n==10)return1;
return(f(n+1)+1)*2;
}
运行结果:
1534
㈦ 一个有关猴子吃桃子的编程题,用c语言循环语句怎么做
1、首先在电脑中打开vc6.0,新建一个项目,添加头文件,如下图所示。
㈧ C语言中的猴子吃桃子问题
#include<math.h>
#include<stdio.h>
intf(inta,intb)
{
intx=b,i;
for(i=a;i>=1;i--)
{
x=(x+1)*2;
}
returnx;
}
intmain()
{
inta,b=1;//b是最后一天剩的桃子树,为1;
intmax;
printf("请输入天数: ");
scanf("%d",&a);
while(a!=0)
{
max=f(a,b);
printf("猴子第一天摘的桃子数为:%d ",max);
scanf("%d",&a);
}
return0;
}
㈨ 用C语言解决猴子吃桃问题!!!
#include
<iostream.h>
void
main()
{
int
day,n1,n2;
day=9;
n2=1;
//n2表示剩下的桃子
while(day>0)
{
n1=(n2+1)*2;
n2=n1;
day--;
}
printf(“%d\n”,n2);
}
第二种方法
#include
<stdio.h>
void
main()
{
int
day,sum=1;
for(day=1;day<=9;day++)
//剩一个桃子是从第九天剩下的,所以要算九次
sum=(sum+1)*2;
printf("%d\n",sum);
}
第三种:
#include<stdio.h>
main()
{
int
day=9,n=1;
while(day-->0)
n=(++n)*2;
/*第1天的桃子数是第2天桃子数加1后的2倍*/
printf("%d",n);
}
第四中方法:
#include
"stdio.h"
main()
{
int
day,m,n;
for(n=2;;n++)
{
m=n;
for(day=1;day<10;day++)
m=m/2-1;
/*m为吃剩下的桃*/
if(m==1)
/*第十天,剩下一个*/
break;
}
printf("第一天摘下的桃子数:%d\n",n);
/*n为符合条件的*/
}