首頁 >後端開發 >C++ >檢查N個骰子的可見面的最大和是否至少為X

檢查N個骰子的可見面的最大和是否至少為X

WBOY
WBOY轉載
2023-09-16 14:13:02788瀏覽

檢查N個骰子的可見面的最大和是否至少為X

在程式設計中解決複雜問題時,效率和準確性通常是至關重要的。其中一個特定的挑戰是適當地確定N個骰子可見面的最大和是否等於或超過X。在本文中,我們評估了在C 編碼中解決這個困難的各種方法,包括語法解釋和逐步演算法。此外,我們還將提供兩個基於所提方法的真實、完整的可執行程式碼範例。到最後,您將清楚地了解如何在C 中檢查N個骰子可見面的最大和是否至少為X。

文法

在深入研究這些方法之前,讓我們先了解一下我們將在以下程式碼中使用的方法的語法 -

bool checkVisibleSum(int N, int X, vector<int>& dice);

方法一

演算法

  • 首先,初始化一個變數 visibleSum 為 0。這個變數將儲存可見面的總和。

  • 迭代遍歷dice向量中的每個元素。

  • 對於每個骰子,按降序排列面。

  • 將最大的面(在排序後的第一個元素)加入到visibleSum中。

  • 如果在任何時候,visibleSum變得大於或等於X,回傳true。

  • 如果迭代完成後沒有找到大於或等於X的可見總和,則傳回false。

Example

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool checkVisibleSum(int N, int X, vector<vector<int>>& dice) {
   int visibleSum = 0;

   for (int i = 0; i < dice.size(); i++) {
      sort(dice[i].rbegin(), dice[i].rend());
      visibleSum += dice[i][0];

      if (visibleSum >= X)
         return true;
   }

   return false;
}

int main() {
   int N = 2; // Number of dice

   vector<vector<int>> dice(N);
   dice[0] = {6, 5, 4}; // Faces of dice 1
   dice[1] = {3, 2, 1}; // Faces of dice 2

   int X = 15; // Minimum sum (X)

   if (checkVisibleSum(N, X, dice))
      cout << "The maximum sum of visible faces of the dice is at least " << X << ".\n";
   else
      cout << "The maximum sum of visible faces of the dice is not at least " << X << ".\n";

   return 0;
}

輸出

The maximum sum of visible faces of the dice is not at least 15.

Explanation

的中文翻譯為:

解釋

在這段程式碼中,我們首先定義了函數checkVisibleSum,它接受三個參數:N(骰子的個數),X(最小和),和dice(表示骰子麵的向量的向量)。

checkVisibleSum函數實作了方法1。它初始化一個變數visibleSum為0,用於儲存可見面的總和。然後它對dice向量中的每個骰子進行迭代。對於每個骰子,它使用sort(dice[i].rbegin(), dice[i].rend())按降序對面進行排序。這確保了最大的面在排序後的向量的開頭。

然後,程式碼使用 visibleSum = dice[i][0] 將目前骰子的最大面加到 visibleSum 中。透過使用這個函數,人們能夠更好地理解在任何給定情況下可能發生的某些事件。

這可以透過它分析給定的visibleSum是否在其分析過程中的各個點超過或等於X來看出。如果在進行研究時發現這種可能性 - 通常由true輸出指示 - 那麼他們可以有一定程度的確定地得出結論,即可觀察特徵的最大數量等於或大於他們最初超過X的意圖。

相反,如果他們在進行了一些相關迭代和計算的探索後仍然找不到所說的統計數據,那麼顯然還有更多未解答的問題。

在主函數中,我們提示使用者輸入骰子的數量(N)。我們建立一個名為dice的向量的向量,用於儲存每個骰子的面。然後我們迭代N次,對於每個骰子,提示使用者輸入面的數量和麵本身。我們將這些值儲存在dice向量中。

接下來,我們要求使用者輸入最小和(X)。我們將N、X和dice傳遞給checkVisibleSum函數。我們將相應地傳達一個訊息,說明可見骰子麵的最大可能和等於或大於X。然而,與這種情況的正面前景相反,我們很可能會因為了解到函數實際上產生與X相關的不理想結果而發布知識。

方法二

演算法

  • 首先,初始化一個變數 visibleSum 為 0。這個變數將儲存可見面的總和。

  • 迭代遍歷dice向量中的每個元素。

  • 對於每個骰子,按降序排列面。

  • 計算前N-1個面的總和(不包括最大面),並將其加到visibleSum中。

  • 如果 visibleSum 變得大於或等於 X,則回傳 true。

  • 如果迭代完成後沒有找到大於或等於X的可見總和,則傳回false。

Example

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

bool checkVisibleSum(int N, int X, vector<vector<int>>& dice) {
   int visibleSum = 0;

   for (int i = 0; i < dice.size(); i++) {
      sort(dice[i].rbegin(), dice[i].rend());
      int sum = accumulate(dice[i].begin(), dice[i].end() - 1, 0);
      visibleSum += sum;

      if (visibleSum >= X)
         return true;
   }

   return false;
}

int main() {
   int N = 2; // Number of dice

   vector<vector<int>> dice(N);
   dice[0] = {6, 5, 4}; // Faces of dice 1
   dice[1] = {3, 2, 1}; // Faces of dice 2

   int X = 15; // Minimum sum (X)

   if (checkVisibleSum(N, X, dice))
      cout << "The maximum sum of visible faces of the dice is at least " << X << ".\n";
   else
      cout << "The maximum sum of visible faces of the dice is not at least " << X << ".\n";

   return 0;
}

輸出

The maximum sum of visible faces of the dice is at least 15.

Explanation

的中文翻譯為:

解釋

在這段程式碼中,我們有與第一種方法相同的checkVisibleSum函數。然而,主要的差異在於可見總和的計算。

方法2對每個骰子的前N-1個面進行求和,不包括最大的面。為了實現這一點,我們使用庫中的accumulate函數。我們將dice[i].begin()和dice[i].begin() N - 1作為累加的範圍傳遞,有效地對所需的面進行求和。

主函數中的其餘程式碼與前一個範例相同。

結論

透過這篇文章,我們的主題圍繞著解決一個關於C 編碼的重要問題。如何確切判斷給定一組骰子(N)的最大可見面總和是否至少為X?在最佳地回答這個問題時,我們找到了兩個實用的解決方案:首先,確保每次擲骰子的結果總和等於或超過X;其次,僅評估前N-1次擲骰子的總和,並判斷它們是否匹配或超過X。此外,我們還提供了針對每種方法的程式碼設定以及執行這些過程的詳細指南。此外,我們還根據這些方法提供了兩個真實的、完整可執行的程式碼範例。透過利用本文提供的知識和程式碼,您現在可以自信地解決在C 編程中確定N個骰子的最大可見面之和是否至少為X的問題。

以上是檢查N個骰子的可見面的最大和是否至少為X的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除