1. 程式人生 > >培訓第五天

培訓第五天

斐波那契數列 mes 邏輯推理 答案 收獲 哈哈哈 快的 pre 題目

今天一種的新生就要軍訓了,但是我不用去啊紅紅火火恍恍惚惚哈哈哈哈,我們邁著輕快的步伐,一臉得意地從他們身邊路過,沿著熟悉的路,走進那個熟悉的機房

今天依然在學習巨難的多重循環,除了運算步驟沒有更多的理解了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 }

④質因子分解:回去補充

 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的位置以及循環裏的循環的位置還是一臉懵逼,求學長解答(今天的問題比較多,希望學長不要嫌棄我,謝謝謝謝,心疼學長一分鐘)

願你的青春不負夢想

加油!共勉!

培訓第五天