• 【TFLSnoi李志帅】第⑩篇文章---爬楼梯(加强版)


    这是我到现在为止都没写出来满分代码的一道题

    上次考试的压轴题目

    【题目描述】

    假期时,TFLSOIers最喜欢的事情是到学校学习C++编程,糟糕的是学习编程的机房在11层,世界上最痛苦的事莫过于爬楼梯。假设爬到11层共有N个台阶,TFLSOIers从下往上爬楼梯,一步可以跨一级台阶,也可以跨两级台阶。问:他们爬到第N个台阶有多少种走法?

    【输入格式】

    一行一个整数n(n的取值范围见下方提示,请认真分析)

    【输出格式】

    一个整数,表示爬到第n级台阶有多少种走法。

    【输入样例】

    3

    【输出样例】

    3

    【提示】

    30%数据 1≤n≤45

    30%数据46≤n≤91

    40%数据92≤n≤100

    根据分析可知,其实考查斐波那契数列数列,只是初始值有所变化,注意初始值的特判

    我写的60分代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     long long a[1005],n;
     6     a[1]=1;a[2]=2;
     7     cin>>n;
     8     for(int i=3;i<=n;i++){
     9         a[i]=a[i-1]+a[i-2];
    10     }
    11     cout<<a[n];
    12     return 0;
    13 }

    但是当我尝试把它改成高精度的时候才发现。。。这太难了!!!我写不出来!!!

    所以嘛。。。

    我决定copy一下老师的满分代码,经常研究研究

    老师的100分代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int f1[105], f2[105], ans[105];
     4 void inf(){
     5     f1[0]=1, f2[0]=2;//初始化相当于f1=1000000..., f2=2000000...
     6 }
     7 void fib(){
     8     int jw=0, i=0;
     9     for(; i<=100; i++){
    10         int t=jw+f1[i]+f2[i];
    11         ans[i]=t%10;
    12         jw=t/10;
    13     }
    14     ans[i]=jw;//jw值放在数组最高位,别忘了
    15 }
    16 void change(int a[], int b[]){//相当于a=b;只不过封装成一个函数
    17     for(int i=0; i<=100; i++){
    18         a[i]=b[i];
    19     }
    20 }
    21 void output(int t[]){
    22     int l=100;
    23     while(t[l]==0){
    24         l--;
    25     }//从后往前去除前导0
    26     for(int i=l; i>=0; i--)cout<<t[i];
    27 }
    28 int main()
    29 {
    30     inf();//初始化相当于f1=1, f2=2
    31     int n;
    32     cin>>n;
    33     if(n==1)output(f1);
    34     else if(n==2)output(f2);
    35     else {
    36         for(int i=3; i<=n; i++){
    37 
    38 //        output(f1);cout<<endl;//测试代码
    39 //        output(f2);cout<<endl;//测试代码
    40         fib();//高精度求 ans=f1+f2
    41 //        output(ans); cout<<endl; //测试代码
    42         change(f1,f2);//将f2赋值给f1相当于  f1=f2
    43         change(f2,ans);//将f1赋值给 f2=ans
    44     }
    45 
    46     //输出ans
    47     output(ans);
    48 
    49     }
    50 
    51     return 0;
    52 }

    相关链接:https://www.cnblogs.com/tflsnoi/p/13277386.html

  • 相关阅读:
    Java连接Oracle数据库
    团队冲刺阶段(八)
    团队冲刺阶段(七)
    团队冲刺进度(六)
    团队冲刺进度(五)
    团队冲刺进度(四)
    团队冲刺进度(三)
    团队冲刺进度(二)
    团队冲刺进度(一)
    软件需求规格所明书
  • 原文地址:https://www.cnblogs.com/TFLSc1908lzs/p/13531804.html
Copyright © 2020-2023  润新知