發表文章

m931. 1. 遊戲選角

 解題思路大致是先找到能力值最大的,然後將其設為0 然後再找一次能力值最大的,這樣就達成題意要的能力值第二大的 註:記得要訂vector大小 #include <iostream> #include <vector> using namespace std ; int main () {     int n = 0 , valaue = 0 , max_v = 0 , max_v_set = 0 ;     vector < pair < int , int >> v ;     cin >> n ;     v . resize ( n ); // 記得配置vector大小     for ( int i = 0 ; i < n ; i ++ ) {         cin >> v [ i ] . first >> v [ i ] . second ;         valaue = v [ i ] . first * v [ i ] . first + v [ i ] . second * v [ i ] . second ;         if ( valaue >= max_v ) {             max_v = valaue ;             max_v_set = i ;         }     }     v [ max_v_set ] = { 0 , 0 };     max_v_set = 0 ;     max_v = 0 ;     val...

a034. 二進位制轉換

  首先是我沒有很懂遞迴 所以我讓GPT和我解釋我自己寫的魔法程式 我不知道為什麼遞迴出來的順序是反的 以下ChatGPT發言: 讓我更詳細地解釋一下為什麼這段程式碼能夠按照二進位表示的正確順序輸出數字。 首先,我們知道將一個十進位數字轉換為二進位表示是通過重複地將該數字除以 2 並記錄餘數來完成的。例如,將十進位數字 13 轉換為二進位,可以通過以下步驟完成: 13 除以 2 的商為 6,餘數為 1 6 除以 2 的商為 3,餘數為 0 3 除以 2 的商為 1,餘數為 1 1 除以 2 的商為 0,餘數為 1 按照上述步驟,我們可以得到 13 的二進位表示為 1101。 在這段程式碼中,我們使用了遞迴的方法來實現這個過程。具體來說,當我們處理一個數字時,我們先將它除以 2 得到商,然後將商作為輸入遞迴調用 convertToBinary 函式。這樣做的結果是,遞迴調用會先處理輸入的數字的更高位部分,然後再處理低位部分,這就造成了遞迴的相反順序。 舉例來說,當我們處理數字 13 時,遞迴調用會先處理 13 的更高位部分,然後再處理 13 的低位部分。這就保證了我們最終輸出的餘數會按照二進位表示的正確順序排列。 希望這樣能夠解釋清楚為什麼這段程式碼能夠按照遞迴的相反順序輸出餘數,從而得到正確的二進位表示。 然後比較困難的遞迴講完了 差不多可以看詳解 #include <iostream> using namespace std ; void convertToBinary ( int x ){     if ( x / 2 != 0 ){         convertToBinary ( x / 2 );     }     cout << x % 2 ; } int main (){     int n = 0 ;     cout << "," ;     while ( cin >> n ){         if ( n == 0 ){   ...

a010. 因數分解

  讀入數字: 程式一開始會從標準輸入中讀取一個整數 n。 處理特殊情況: 如果輸入的數字是 1,則直接輸出 "1",因為 1 的因數只有 1 本身。 迴圈因數分解: 使用 for 迴圈從 2 開始遍歷到 n。 找因數: 每次迭代,檢查當前數字是否能被迴圈變數 i 整除,如果是,則表示 i 是 n 的因數之一。 計算因數次數: 當找到一個因數後,使用 while 迴圈持續除以這個因數,同時計算該因數出現的次數。 輸出結果: 如果某個因數出現的次數大於 1,則輸出因數的次方形式,例如 i^t;否則,只輸出因數 i。 重置計數器: 在處理完一個因數後,將計數器 t 重置為 0。 輸出乘號: 如果還有其他因數需要處理(即 n 大於 1),則在因數之間輸出乘號 " * "。 以下詳解: #include <iostream> using namespace std ; // 因數分解次方版 int main (){     int n = 0 , t = 0 ;     cin >> n ;     if ( n == 1 ){         cout << "1" ;     }     else {         for ( int i = 2 ; i <= n ; i ++ ){             if ( n % i == 0 ){                 while ( n % i == 0 ){                     n /= i ;                     t += 1 ...