c語言猴子爬山
正確的答案是3121。
手工驗算一下吧,又不難的!
#include
<stdio.h>
//判斷能否被合理的分配
int
divide(int
n,int
m)
{
if(n/5==0
||
n%5!=1)
{//不足5個或不能分5份多1個,分配失敗
return
0;
}
if(m==1)
{//分到最後一個猴子,說明能分配成功
return
1;
}
return
divide(n-n/5-1,m-1);
}
main()
{
int
n;//桃子數量
for(n=1;;n++)
{
if(divide(n,5))
{//判斷能否被合理的分配
printf("%d\n",n);
break;
}
}
}
2. C語言程序設計,猴子選大王
#include<stdio.h>
#include<stdlib.h>
main()
{ int a[50];
int i,j,M,N,t=0;
printf("input two number.\n");
scanf("%d %d",&N,&M);
for(i=0;i<N;i++)
a[i]=i+1;
for(j=1,i=0;;j++,i++)
{
if(i==N)i=0;
if(a[i]==0){j--;continue;}
if(j%M==0){a[i]=0;t++;}
if(N-t==1)break;
}
for(i=0;i<N;i++)
if(a[i]!=0) printf("猴王是第%d個.\n",a[i]);
system("pause");
}
試試...
3. c語言編程解決小猴爬山
上山下山應該是一樣的,都是讓電腦一個值一個值去判斷。我的想法是讓電腦先判斷出所有可能的組合,比如2+3+5和3+2+5是一個概念,然後建立一個排列組合的函數,對組合進一步處理。上山為例:
#include<stdio.h>
intjc(inta)//階乘
{
inti,j=1;
for(i=a;i>0;i--)
{
j=j*i;
}
returnj;
}
intmain(intargc,char*argv[])
{
intn;//方法數
constintt=50;//台階數
inti,j,k;
for(i=0;i<=25;i++)//2*25=50
for(j=0;j<17;j++)//3*16=48
for(k=0;k<13;k++)//4*12=28
{
if(2*i+3*j+4*k==t)//兩步、三步或四步
{
n=n+jc(i+j+k)/(jc(i)*jc(k)*jc(j));
}
}
printf("上山總數為:%d種 ",n);
return0;
}
這個程序計算出來上山有3731種