计蒜客 挑战难题 爬楼梯

假设你现在正在爬楼梯,楼梯有n级。每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部?

格式:

第一行输入一个数n(n<=50),代表楼梯的级数。

接下来一行输出你的方法总数。

样例输入

5

样例输出

8==========================第一次code:
 1 import java.util.Scanner;
 2
 3 public class Main
 4 {
 5     public static void main(String[] args)
 6     {
 7         Scanner input = new Scanner(System.in);
 8         System.out.println(a(input.nextInt()));
 9     }
10     static long a (int n)
11     {
12         int a = n / 2;
13         int b = n - a*2;
14         long c=0;
15         if(a==0)
16         {
17             return 1;
18         }
19         else
20         {
21             for(int i=0;i<a;i++)
22             {
23                 c += work(n-(i+1),i+1);
24             }
25             return c+1;
26         }
27     }
28     /**
29      * 计算排列组合
30      * @param n
31      * @param k
32      * @return
33      */
34     static long work(int n , int k)
35     {
36         if(k > n/2)
37         {
38             k = n-k;
39         }
40         long a = 1;
41         long b = 1;
42         int i;
43         for(i = 1 ; i <= k ; ++i)
44         {
45             a *= n-i+1;
46             b *= i;
47             if(a%b == 0)
48             {
49                 a /= b;
50                 b = 1;
51             }
52         }
53         return a/b;
54     }
55 }
台阶数为 1 阶时,方法数为:1台阶数为 2 阶时,方法数为:2台阶数为 3 阶时,方法数为:3台阶数为 4 阶时,方法数为:5台阶数为 5 阶时,方法数为:8台阶数为 6 阶时,方法数为:13台阶数为 7 阶时,方法数为:21台阶数为 8 阶时,方法数为:34台阶数为 9 阶时,方法数为:55台阶数为 10 阶时,方法数为:89台阶数为 11 阶时,方法数为:144台阶数为 12 阶时,方法数为:233台阶数为 13 阶时,方法数为:377台阶数为 14 阶时,方法数为:610台阶数为 15 阶时,方法数为:987台阶数为 16 阶时,方法数为:1597台阶数为 17 阶时,方法数为:2584台阶数为 18 阶时,方法数为:4181台阶数为 19 阶时,方法数为:6765台阶数为 20 阶时,方法数为:10946台阶数为 21 阶时,方法数为:17711台阶数为 22 阶时,方法数为:28657台阶数为 23 阶时,方法数为:46368台阶数为 24 阶时,方法数为:75025台阶数为 25 阶时,方法数为:121393台阶数为 26 阶时,方法数为:196418台阶数为 27 阶时,方法数为:317811台阶数为 28 阶时,方法数为:514229台阶数为 29 阶时,方法数为:832040台阶数为 30 阶时,方法数为:1346269台阶数为 31 阶时,方法数为:2178309台阶数为 32 阶时,方法数为:3524578台阶数为 33 阶时,方法数为:5702887台阶数为 34 阶时,方法数为:9227465台阶数为 35 阶时,方法数为:14930352台阶数为 36 阶时,方法数为:24157817台阶数为 37 阶时,方法数为:39088169台阶数为 38 阶时,方法数为:63245986台阶数为 39 阶时,方法数为:102334155台阶数为 40 阶时,方法数为:165580141台阶数为 41 阶时,方法数为:267914296台阶数为 42 阶时,方法数为:433494437台阶数为 43 阶时,方法数为:701408733台阶数为 44 阶时,方法数为:1134903170台阶数为 45 阶时,方法数为:1836311903台阶数为 46 阶时,方法数为:2971215073台阶数为 47 阶时,方法数为:4807526976台阶数为 48 阶时,方法数为:7778742049台阶数为 49 阶时,方法数为:12586269025台阶数为 50 阶时,方法数为:20365011074

单次运算,时间效率为 0 毫秒。
时间: 2024-10-12 20:44:40

计蒜客 挑战难题 爬楼梯的相关文章

计蒜客 挑战难题 移除数组中的重复元素

给定一个升序排列的数组,去掉重复的数,并返回新的数组的长度. 例如: 数组A = {1, 1, 2},你的函数应该返回长度2,新数组为{1, 2} 要求: 不能新开数组分配额外的空间.即常数空间限制. 提示: 输入一个整数n,以及其对应的数组A[n],输出新数组长度 样例输入 5 0 0 1 1 2 样例输出 3 =========================第一次code: 1 import java.util.ArrayList; 2 import java.util.List; 3 i

计蒜客 挑战难题 整数转换成罗马数字

给定一个整数num,( 1<=num<=3999),将整数转换成罗马数字. 如1,2,3,4,5对应的罗马数字分别位I,II,III,IV,V等. 格式: 第一行输入一个整数,接下来输出对应的罗马数字. 提示: 罗马数字的常识见此链接,对做题有帮助哦-尤其是表示方法. http://baike.baidu.com/link?url=injU8M4bAoc2zRZQ1GtgrfvuzCJO9PLnq6fpQGJLenakbzo-rS8p-qsYHR_81-aN 样例输入 123 样例输出 CXX

计蒜客 挑战难题 寻找插入位置

给定一个已经升序排好序的数组,以及一个数 targettargettarget,如果 targettargettarget 在数组中,返回它在数组中的位置. 否则,返回 targettargettarget 插入数组后它应该在的位置. 假设数组中没有重复的数.以下是简单的示例: [1,3,5,6], 5 → 2 [1,3,5,6], 2 → 1 [1,3,5,6], 7 → 4 [1,3,5,6], 0 → 0 输入格式 第一行输入一个整数 nnn. 第二行输入 nnn 个整数,表示数组A[n]

计蒜客 挑战难题 元素移除

给定一个数组和一个数(该数不一定在数组中),从数组里删掉这个数字,返回剩下的数组长度. 如:A[] = {1, 2, 3, 4, 5}, 要删除数字3, 那么返回数组长度为4. 亲爱的小伙伴们,题目是不是很简单呢? 提示: int removeElement(int A[], int n, int elem) 其中,n代表数组长度,elem代表要删掉的元素. 格式: 输入一个数n,继而输入一个数组A[n],接着输入要删除的元素elem,返回剩余数组长度index. ===============

计蒜客 作弊揭发者(string的应用)

鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统.当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字.字母序列识别车牌,通过连接车管所车辆信息数据库确认车辆,进行扣费. 斗智斗勇的好戏一般从此处展开… 一些车主通过在停车时遮挡车牌上的一个或多个数字.字母序列,来阻碍识别系统的识别工作,以此逃避停车费用的缴纳. 车主这简直是用轻轻的一挡搞出来一个世界难题有木有?!管理是一方面,技术解决才是王道啊. 这么难的项目不得不交给计蒜客实验室了.D 神负责

计蒜客 无脑博士和他的试管们

无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直到被灌试管装满或原试管空了.当然每一次灌注都是完全的.由于无脑博士天天这么折腾,早已熟练,溶液在倒的过程中不会有丢失. 写一个程序去帮助无脑博士找出当A是个是空的时候,C试管中硫酸铜溶液所剩量的所有可能性. 输入包括一行,为空格分隔开的三个数,分别为整数A,B和C. 输出包括一行,升序地列出当A试管是空的时

简单斐波那契——计蒜客(4)

题目来自“计蒜客”第4题. 解算法题之前,务必先写出与之对应的数学表达式,用于描述算法. 数学描述如图: 根据“数学描述“,写出代码如下: #include <stdio.h> int main() { int N =0 ; scanf("%d", &N); int i, fn1 = 1, fn2 = 0, fn; switch(N) { case 0: printf("0"); break; case 1: printf("1&quo

计蒜客普及组模拟赛

今天没事闲的看到计蒜客有个普及组模拟赛,就当练了练手去打了,成绩低的可怜...400分崩成280分AK梦想化作泡影 第一题 同学的爱好 链接:https://nanti.jisuanke.com/t/17291 小学应用题难度?大概画个图就能懂,把每个部分都标上号,算出a,b,c,d,e,f的部分,进行运算就行了. 不多解释了,直接上代码 #include<iostream> #include<cstdio> #include<algorithm> #include&l

计蒜客 删除字母&#39;c&#39;

删除字母'c' 右侧的程序实现的功能是从字符串s中删除所有的小写字母c,请改正程序错误的地方. 注意:main函数不可以改动,程序结构也不能修改. 很简单的哦,加油吧- 样例输入 abccabcn 样例输出 ababn 1 #include <stdio.h> 2 3 #define N 1024 4 5 void del(char *s) 6 { 7 int i, j; 8 for(i = j = 0; s[i] != '\0'; i++) 9 { 10 if(s[i] != 'c') 11