如果你再多点在猴子偷桃上的解释,我才能把这个程序的功能,根据情况告诉你。
我有一个我做的猴子偷桃程序 希望对你有帮助
int monkey(int n,int num)//n为猴子数,num为桃子数
{
if(n==0) //如果猴子数为0调用结束
return 0;
if(num%5-1==0)//如果桃子数满足条件 桃子数分为5份
num/=5;
else return 1; //否则 跳出函数
n--; //猴子数-1
monkey(n,num);//若没有跳出函数 则继续调用
}
int main(void)
{
int i=5;
while(1)
{
if(monkey(5,i)==0)
{
printf("%d\n",i);
break;
}
i++;
}
return 0;
}
int
peachcount;
for
(
peachcount
=
0
;
;
peachcount++
)
{
bool
ok
=
true;
int
tmp
=
peachcount;
for
(
int
i
=
0
;
i
<
5
;
i++
)
{
if
(
tmp
%
5
==
1
)
{
tmp
=
(
tmp
-
1
)
/
5;
}
else
{
ok
=
false;
break;
}
}
if
(
ok
)
{
printf(
"一共"
+
peachcount
+
"个桃子。"
);
break;
}
}
//最少781个桃子,最后一只猴子拿走了最后一个桃子,剩下0个桃子,这合理吗?如果不合理就是3906个,就是把算余数的那个循环加一次。结果不唯一,所以ok的时候要break。代码里也许会后语法错误,我c语言不太熟,但是我喜欢程序逻辑。有什么不懂的也可以找我。呵呵。745729276
如果真是吃到了第10天,我想说这TMD还是猴子吗?第一天就会撑死!
C代码在线运行工具
#include <stdioh>
int main()
{
int day = 10;
int sum = 0;
int i = 0;
sum = 1;
for (i = day; i >= 1; i--) //吃之后算法
{
sum = (sum + 1) 2;
}
printf("第 %d 天吃之后还剩1个,最初有 %d 个桃子,", day, sum);
printf("第 1 天吃了 %d 个桃子;\r\n", 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 个桃子。\r\n", sum / 2 + 1);
return 0;
}
第 10 天吃之后还剩1个,最初有 3070 个桃子,第 1 天吃了 1536 个桃子;
第 10 天吃之前还剩1个,最初有 1534 个桃子,第 1 天吃了 768 个桃子。
#include
<iostreamh>
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
<stdioh>
void
main()
{
int
day,sum=1;
for(day=1;day<=9;day++)
//剩一个桃子是从第九天剩下的,所以要算九次
sum=(sum+1)2;
printf("%d\n",sum);
}
第三种:
#include<stdioh>
main()
{
int
day=9,n=1;
while(day-->0)
n=(++n)2;
/第1天的桃子数是第2天桃子数加1后的2倍/
printf("%d",n);
}
第四中方法:
#include
"stdioh"
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为符合条件的/
}
约瑟夫环问题:
length个人围成一圈,分别编号1到length,从1开始报数报到seg的出去,继续报,问最后剩下的是原来的几号?
#include "stdioh"
#define MAX 20
/length个人围成一圈,报到seg退出,返回最后留下人的序号(>=1)/
int JohnsonRing(int length, int seg){
int arr[MAX];
int i, k, n;
/设置每一个人的出局标志:0在列,1退出/
for(i=0; i<length; i++){
arr[i] = 0;
}
i = 0;
k = 1;
n = length;
while(n > 1) {
if(arr[i] == 1){ /当前位置的人已退出,移到下一位置 /
i = (i + 1) % length;
continue;
}
if(k == seg){ /当前位置的人退出/
arr[i] = 1;
n--;
printf("%d\n", i+1);
i = (i + 1) % length;
k = 1;
}
else{ /继续报数/
k++;
i = (i + 1) % length;
}
}
for(i=0; i<length && arr[i]==1; i++);
return i+1;
}
void main()
{
int remain;
printf("sequence :\n");
remain = JohnsonRing(10, 7);
printf("remain : %d\n", remain);
}
public class Monkey
{
public static void main(String[] args)
{
int sum=0,remain=1;
//每天吃剩的桃子加一个正好是前一天桃子的一半,每天桃子的总数就是前一天剩下桃子的数量
for(int day=9;day>=1;day--)
{
sum=(remain+1)2;
remain=sum;
Systemoutprintln("第"+day+"天还剩"+remain+"个桃子");
}
Systemoutprintln(sum);
}
}
以上就是关于猴子偷桃 c语言全部的内容,包括:猴子偷桃 c语言、用C语言编一程序 猴子分桃的问题、请用C语言编写一个程序,“猴子吃桃”问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)