• 培训第五天


    今天一种的新生就要军训了,但是我不用去啊红红火火恍恍惚惚哈哈哈哈,我们迈着轻快的步伐,一脸得意地从他们身边路过,沿着熟悉的路,走进那个熟悉的机房

    今天依然在学习巨难的多重循环,除了运算步骤没有更多的理解了TAT

    今天还是在刷多重循环相关题目,目前已经濒临不会写代码TAT(我可能要像焦老师说的一样几天写一个代码了2333)

    以下是一些很有难度的题目(今天刷的每道题都很有难度)以及自己的理解:

    ①兔子总数问题:这道题的方法真的是太巧妙了!!!若第一个月的兔子对数为a,第二个月的兔子对数为b,第三个月的兔子对数为c,则有a+b=c;接着,若第二个月的兔子对数为a‘,第三个月的兔子对数为b’,第四个月的兔子对数为c‘,则有a’+b‘=c’。因为a‘=b,b’=c,所以要把b赋值给a,把c赋值给b,即a=b,b=c,每次循环运算时,这个月、上个月、上上个月就会往后推一个月,从而实现循环

    这道题要格外注意,从这道题中汲取解决方法和逻辑推理能力

    此外,这道题还涉及到斐波那契数列,其用函数表达为f(n)=f(n-1)+f(n-2)

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     long long a=1,b=2,c=0;
     6     int x;
     7     cin>>x;
     8     if(x==1) cout<<a<<endl;
     9     if(x==2) cout<<b<<endl;
    10     if(x>=3)
    11         for(int i=3;i<=x;i++)
    12         {
    13             c=a+b;
    14             a=b;
    15             b=c;
    16         }
    17         cout<<c<<endl;
    18         return 0;
    19 }

    ②再求素数:这道题在写if的条件,思维会被打乱,因此一定要静下心来,一点一点分析条件,很多次都因为“{}”以及for循环中的for循环位置错误导致输出错误的答案,最后类比了求完数的格式才解出来,格式正确还是要建立在充分理解的基础上吧;另外对于flag的用法又有了一些了解,即先假设flag成立(存在?),在之后的运算中给出条件,若满足,则flag成立,反之不成立,最后根据题目需求输出当flag成立或不成立时的答案

     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int main()
     5 {
     6     int x;
     7     cin>>x;
     8     for(int i=2;i<=x;i++)
     9         {
    10             bool flag=0;
    11             for(int j=2;j<=sqrt(i*1.0);j++)
    12             {
    13                 if(i==2) flag=0;
    14                 if(i%j==0) {flag=1; break;}
    15                 if(i%j!=0&&i!=2) flag=0;
    16             }
    17             if(flag==0) cout<<i<<endl;
    18         }
    19     return 0;
    20 }

    ③韩信点兵:这道题不是太难,还是输入的格式问题,刚开始else加到哪都不对,后来换了一种表达方式,就解出题了,还是不太理解for循环与if配合使用时的格式

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int x,a,b,c;
     6     cin>>a>>b>>c;
     7     while((x-a)%3!=0||(x-b)%5!=0||(x-c)%7!=0)
     8     {
     9         x++;
    10     }
    11     if(10<=x&&x<=100) cout<<x<<endl;
    12     if(x>100||x<10) cout<<"No answer"<<endl;
    13     return 0;
    14 }

    ④质因子分解:这道题关键在于理解k=0的意思,k=0即做标记,表示没有输出,若满足条件,输出相应内容,同时k=1,表示已经输出过了,再次输出时则不满足k=0的条件,输出时带“×”,还有就是为什么能保证每次输出的都是质数,举个栗子,12,若第一次运算输出2,则变为6,而下一次运算不可能输出6,因为2比6小,2会输出,所以每个大于2的非质数都是可以两个或以上的质数相乘得到

     1 #include<iostream>
     2 using namespace std;
     3 int main()
     4 {
     5     int n,k=0;
     6     cin>>n;
     7     while(n>=2)
     8     {
     9         for(int i=2;i<=n;i++)
    10             while(n%i==0)
    11             {
    12                 if(k==0) {cout<<n<<'='<<i;k=1;}
    13                 else {cout<<'*'<<i;}
    14                 n=n/i;
    15             }
    16             break;
    17     }
    18     return 0;
    19 }

    今天又犯了一些低级错误,比如:

    ①“{}”只加了一半,以后要仔细检查,输入时要细心

    ②没看清题,把“No answer”打成了“No Answer”,输入前一定要仔细看题

    ③少加“;”,还是要仔细检查,除了for、if、while以外,其他的都要输入“;”

    今天做出的题不多,因为题实在是太难了TAT(也可能是我智商不够用吧2333),最主要的收获还是对解题思路以及解题步骤的理解

    另外,对于break的用法、“{}”的位置、cout的位置以及循环里的循环的位置还是一脸懵逼,求学长解答(今天的问题比较多,希望学长不要嫌弃我,谢谢谢谢,心疼学长一分钟)

    愿你的青春不负梦想

    加油!共勉!

  • 相关阅读:
    Luogu P1247 取火柴游戏
    Luogu P2148 [SDOI2009]E&D
    Luogu P3305 [SDOI2013]费用流 二分 网络流
    NTT学习笔记
    Luogu P4015 运输问题
    Lucas定理学习笔记(没有ex_lucas)
    Luogu P2613 【模板】有理数取余
    欧拉定理与扩展欧拉定理学习笔记
    BSGS与exBSGS学习笔记
    Luogu P3868 [TJOI2009]猜数字
  • 原文地址:https://www.cnblogs.com/zrjl/p/7259787.html
Copyright © 2020-2023  润新知