返回列表 發帖

202411新手3-陣列運算 (Array)

問題敘述 資訊老師最近在教陣列,為了讓大家練習陣列,他出了一道習題,要求大家撰寫一個程式,輸入兩個數列並儲存在兩個陣列中,然後按照下列規則進行運算:
1.第一輪處理第一個陣列。
2.自第二輪開始,如果上一輪的輸出是奇數,本輪處理第一個陣列;上輪的輸出是偶數,則處理第二個陣列。
3.處理陣列時,先檢查陣列的第一個數值是否可以被3整除。
  3.1. 如果可以被3整除,則找到當前陣列的最大值(可能不只一個),輸出此值,然後把它們除以2(無條件捨去)。
  3.2. 如果不能被 3 整除,則找到當前陣列的非 0 最小值(可能不只一個),輸出此值,然後把它們減去1。
4.重複步驟2到4,直到輸出0後停止。

評分說明 此題目測資分為兩組,每組測資有多筆測試資料,需答對該組所有測資才能獲得該組分數,各組詳細限制如下。
第一組 (20 分):確保同一列輸入的所有值均相同。
第二組 (80 分):無特別限制。
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
May

  1. #include <bits/stdc++.h>

  2. using namespace std;

  3. int main()
  4. {
  5.     int A[5], B[5], last = 1;//預設最後的輸出是1,才能先處理第一輪
  6.     for (int i = 0; i < 5; ++i)
  7.     {
  8.         cin >> A[i];
  9.     }
  10.     for (int i = 0; i < 5; i++)
  11.     {
  12.         cin >> B[i];
  13.     }

  14.     while (1)
  15.     {
  16.         if (last % 2 == 1) // 處理第一個陣列
  17.         {
  18.             if (A[0] % 3 == 0) // 如果第一個數值可以被3整除
  19.             {
  20.                 int max = 0;
  21.                 for (int i = 0; i < 5; ++i) // 找到最大值
  22.                 {
  23.                     if (A[i] > max)
  24.                     {
  25.                         max = A[i];
  26.                     }
  27.                 }
  28.                 cout << max << endl;
  29.                 for (int i = 0; i < 5; i++) // 將他們除以2
  30.                 {
  31.                     if (A[i] == max)
  32.                     {
  33.                         A[i] /= 2;
  34.                     }
  35.                 }
  36.                 last = max;
  37.             }
  38.             else // 如果第一個數值不能被3整除
  39.             {
  40.                 int min = 2147483647;
  41.                 for (int i = 0; i < 5; ++i) // 找到非0最小值
  42.                 {
  43.                     if (A[i] < min && A[i] != 0)
  44.                     {
  45.                         min = A[i];
  46.                     }
  47.                 }
  48.                 cout << min << endl;
  49.                 for (int i = 0; i < 5; ++i) // 將他們減去1
  50.                 {
  51.                     if (A[i] == min)
  52.                     {
  53.                         A[i] -= 1;
  54.                     }
  55.                 }
  56.                 last = min;
  57.             }
  58.         }
  59.         else // 處理第二個陣列
  60.         {
  61.             if (B[0] % 3 == 0) // 如果第一個數值可以被3整除
  62.             {
  63.                 int max = 0;
  64.                 for (int i = 0; i < 5; ++i) // 找到最大值
  65.                 {
  66.                     if (B[i] > max)
  67.                     {
  68.                         max = B[i];
  69.                     }
  70.                 }
  71.                 cout << max << endl;
  72.                 for (int i = 0; i < 5; ++i) // 將他們除以2
  73.                 {
  74.                     if (B[i] == max)
  75.                     {
  76.                         B[i] /= 2;
  77.                     }
  78.                 }
  79.                 last = max;
  80.             }
  81.             else // 如果第一個數值不能被3整除
  82.             {
  83.                 int min = 2147483647;
  84.                 for (int i = 0; i < 5; ++i) // 找到非0最小值
  85.                 {
  86.                     if (B[i] < min && B[i] != 0)
  87.                     {
  88.                         min = B[i];
  89.                     }
  90.                 }
  91.                 cout << min << endl;
  92.                 for (int i = 0; i < 5; ++i) // 將他們減去1
  93.                 {
  94.                     if (B[i] == min)
  95.                     {
  96.                         B[i] -= 1;
  97.                     }
  98.                 }
  99.                 last = min;
  100.             }
  101.         }
  102.         if (last == 0)
  103.         {
  104.             break;
  105.         }
  106.     }
  107. }
複製代碼
May

TOP

返回列表