培训第五天

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

今天依然在学习巨难的多重循环,除了运算步骤没有更多的理解了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的位置以及循环里的循环的位置还是一脸懵逼,求学长解答(今天的问题比较多,希望学长不要嫌弃我,谢谢谢谢,心疼学长一分钟)

愿你的青春不负梦想

加油!共勉!

 

posted @ 2017-07-30 17:33  赵瑞洁2020  阅读(255)  评论(2编辑  收藏  举报