首页 > 其他分享 >青蛙跳台阶(C语言数学排列组合公式求解法)

青蛙跳台阶(C语言数学排列组合公式求解法)

时间:2023-10-18 18:44:07浏览次数:47  
标签:总共 跳时 台阶 int 青蛙 跳法 C语言 排列组合

题目:从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶,也可以跳2级台阶;问:该青蛙跳到第n级台阶一共有多少种跳法。


当只有跳一级台阶的方法跳时,总共跳n步,共有1次跳法                                

当用了一次跳二级台阶的方法跳时,总共跳n-1步,共有n-1次跳法     

当用了两次跳二级台阶的方法跳时,总共跳n-2步,共有((n-2)*(n-3))/(2*1)种跳法

当用了三次跳二级台阶的方法跳时,总共跳n-3步,共有((n-2)*(n-3)*(n-4))/(3*2*1)种跳法

代码:

#include <stdio.h>
int Fac(int n)//求n的阶乘函数
{
    int ret = 1;
    for (int i = 1; i <= n; i++)
    {
        ret *= i;
    }
    return ret;
}
int C_n_i(int n, int i)//求排列组合函数
{
    if (i == 0||i==n)
    {
        return 1;
    }
    else
    {
        return Fac(n) / (Fac(i) * Fac(n - i));
    }
}
int main()
{
    //青蛙跳台阶问题
    //数学的排序问题
    //不用递归的解法
    int n;
    scanf("%d", &n);
    int sum = 0;
    for (int i = 0; i <= n / 2; i++)
    {
        sum += C_n_i(n-i,i);
    }
    printf("%d", sum);
    return 0;
}

运行结果:

欢迎提出错误

标签:总共,跳时,台阶,int,青蛙,跳法,C语言,排列组合
From: https://www.cnblogs.com/L-Drake/p/17766550.html

相关文章

  • C语言-读取一个目录中的文件,并将文件名写入数组
    C语言-读取一个目录中的文件,并将文件名写入数组注意点:文件名是字符串,放入数组,需要数组二维数组,array[m][n],m表示字符串的个数,n表示字符串的长度;使用函数char*strcpy(char*destination,constchar*source),例如:charstrings[3][10];strcpy(strings[0],"hello");......
  • C语言---去掉字符串中的空格
    有时候,我们会遇到,字符串中有空格,那如何删除呢?要删除空格,就需要找到空格,找到空格,就需要遍历字符串。下面是示例代码:(分别使用了for和while循环)#include<stdio.h>#include<stdlib.h>#include<ctype.h>voidfun(char*str){ inti=0; char*p; /*标记:p=str表示指针指......
  • C语言 内存布局
    GCC编译预处理->编译->汇编->链接预处理:头⽂件包含、宏替换、条件编译、删除注释...编译:主要进⾏词法、语法、语义分析等,检查⽆误后将预处理好的⽂件编译成汇编⽂件...汇编:将汇编⽂件转换成⼆进制⽬标⽂件...链接:将项⽬中的各个⼆进制⽂件+所需的库+启动代码链接成可执⾏⽂......
  • C语言-结构体使用
    C语言-结构体使用#include<stdio.h>#include<stdlib.h>#include<string.h>//结构体/*结构体定义*/structPerson{ charname[20]; intage;};intmain(){/*结构体赋值*/ structPersonperson1={"Tom",20 }; printf("Name:%s,age:......
  • C语言-数组初始化方式
    C语言-数组初始化方式#include<stdio.h>#include<string.h>//数组初始化intmain(){ //方式1:{0} intarr1[3]={0}; for(inti=0;i<3;i++){ printf("arr1[%d]=%d\n",i,arr1[i]); } //方式2:for循环 intarr2[3]; for(inti=0;i<3;i++)......
  • C语言部分学习知识记录
    导包#include时候使用<>和""的区别://<filename.h>->去系统存放头文件的位置找.h文件//"filename.h”->去当前目录寻找头文件,如果没找到再去系统存放头文件的位置找.h文件main函数中参数意义//intargc->从命令行传入的参数个数//char*argv[]->存放参数的数组//char*env[......
  • 【C语言】数组指针
    【C语言】数组指针顾名思义,数组指针是指向数组的指针。例如,p是一个指向含有3个int元素的一维数组的指针:int(*p)[3];//圆括号的优先级更高,让p先与*结合再与[]结合用法:#include<stdio.h>//voiddisplay1(intp[][3])//等价下行写法voiddisplay......
  • 初入c语言学习
        hello,我是一名大一新生,2023/8/1开始在视频上跟着学习c语言。回顾前两个月,我对c语言的认识已经不停留在一门高深莫测的技术,也让我逐渐清晰自己想要什么,当然,与此相对应的就是付出比在暑假期间更多学习时间的决心。    在学习前,因对c语言认识有限,或者说对计算机这......
  • C语言-水仙花数
    计算100-1000内的水仙花#include<stdio.h>//水仙花数boolshuixianhua(intnum); intmain(){ inti; for(i=100;i<1000;i++){ if(shuixianhua(i)==1){ printf("%disashuixianhuanum.\n",i); } } return0; }boolshuixianhua(in......
  • C语言判断字符串为空
    一、字符串的定义方式1:使用一个字符数组来存储一个字符串charstr_array[LEN];方式2:malloc一段内存来存储一个字符串char*str_ptr=(char*)malloc(LEN*sizeof(char)); 二、初始化定义了数组或字符指针之后,需要做一个初始化,否则里面将是随机值,以后将无法判断改......