当前位置:首页 » 编程语言 » c语言猴子跳台阶
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言猴子跳台阶

发布时间: 2022-10-06 01:01:50

❶ 猴子上楼梯的c语言详细原代码及解析

20分……
只能给你思路了

用数组a[i]记录猴子上到第i个阶梯时最少代价,b[i]为所输入的阶梯上的正整数数据

用两层循环,

第一层循环i是从1到n,对每层阶梯进行扫描

第二层循环j是从1到k,如果a[i+j]<a[i]+b[i+j]即将a[i+j]更新为a[i]+b[i+j]

a[i]+b[i+j]的意思是在第i层阶梯的最少代价加上第i+j层的那个数据,
如果小于在第i+j层的暂时最小代价(因为最小值还没确定),
那么就更新第i+j层的代价,使它变得更小

这样一步步递推,就能得到a[n]的最小代价

❷ C语言题目:一个猴子在一座不超过30级的山上跳跃,上山一步可跳1级或2级或3级,求上山有多少种爬法急急

这样的一个题你可以参考一下,希望对你有帮助。。。。。。。
一只顽猴在一座有50级台阶的小山上爬山跳跃。上山时需从山脚至山顶往上跳50级台阶,一步可跳2级,或跳3级,或跳4级,求上山有多少种不同的跳法?下山时从山顶至山脚往下跳50级台阶,一步可跳1级,或跳2级,或跳3级,求下山有多少种不同的跳法?
程序怎样写?
#include <stdio.h>

//状态存储数组
double way[52];

int main ()
{
//初始化
way[1] = 0;
way[2] = 1;
way[3] = 1;
way[4] = 2;

for (int i=5; i<=50; i++)
{
way[i] = way[i-2]+way[i-3]+way[i-4];
}
printf("上山的跳法:%.0lf\n", way[50]);

//初始化
way[0] = 0;
way[1] = 1;
way[2] = 2;
way[3] = 4;
for (int i=4; i<=50; i++)
{
way[i] = way[i-1]+way[i-2]+way[i-3];
}
printf("下山的跳法:%.0lf\n", way[50]);

return 0;
}

❸ c语言程序设计

#include<stdio.h>

intmain()
{
inti=0,j=0;
intslnum=0;
for(i=0;i<=30;i++)
for(j=0;j<=10;j++){
if((i+3*j)==30){
slnum++;
printf("%d,%d ",i,j);
}
}
printf("thenumofsolutionis%d ",slnum);
return0;
}

其实就是x+3y = 30有多少解的问题

❹ 急求!C语言递推问题

倒着想,我先举个例子,比如N=10 x=3 y=4
那么 我要到在第10阶,一种办法是从第7阶走x=3步到10,另一种从第6阶走y=4步到10
这个问题化为走到7阶和6阶要如何走
再看7阶。一种办法是从第4阶走x步到7阶,另一种从第3阶走y=4步到7
再看6阶。一种办法是从第3阶走x步到6阶,另一种从第2阶走y=4步到6.但考虑到处若从2阶走4到6的话,2阶是不可能到达的。因为只能走3或4阶,所以这里删掉这种情况
就剩下走到第4阶和第3阶的走法了
显然它们各自只有一种走法
最后就是
3+3+4
3+4+3
4+3+3
共3种
这种思想就是倒着想,向前推进。再逆转过来。有点类似动态规划
化为一般的思想
走到N阶有几种走法的问题可以转化为走到N-X与走到N-Y阶之和(X!=Y)
而同理N-X要看N-2X与N-X-Y的走法之和
N-Y要看N-X-Y与N-2Y之和
依次下去。最终结束的条件就是N-aX或N-bY或N-cX-dY中任何一个小于给定的X或Y说明此种走法不通。那么去掉这种走法且结束。
若开始的时候上述条件就成立则为sorry

❺ C语言:所有猴子按1~M 编号围坐一圈,从第p 号开始按顺序1~N 报数,凡报到N 的猴子退出到圈外

http://www.cnblogs.com/EricYang/archive/2009/09/04/1560478.html
这是约瑟夫环的问题,上面有链接。

❻ 一个c语言题目,选猴子,从m个猴子中每隔n-1个猴子踢出去一个,不断顺时针循环

六财福珠宝

六财福珠宝

❼ 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种