Semak sama ada jumlah maksimum muka kelihatan N dadu ialah sekurang-kurangnya X

WBOY
Lepaskan: 2023-09-16 14:13:02
ke hadapan
762 orang telah melayarinya

Semak sama ada jumlah maksimum muka kelihatan N dadu ialah sekurang-kurangnya X

Kecekapan dan ketepatan selalunya penting apabila menyelesaikan masalah kompleks dalam pengaturcaraan. Satu cabaran tertentu adalah untuk menentukan dengan sewajarnya sama ada jumlah maksimum muka yang kelihatan bagi N dadu sama atau melebihi X. Dalam artikel ini, kami menilai pelbagai pendekatan untuk menyelesaikan kesukaran ini dalam pengekodan C++, termasuk penjelasan sintaksis dan algoritma langkah demi langkah. Tambahan pula, kami akan menyediakan dua contoh kod boleh laku yang sebenar dan lengkap berdasarkan pendekatan yang dicadangkan. Pada akhirnya, anda akan mempunyai pemahaman yang jelas tentang cara menyemak dalam C++ sama ada jumlah maksimum wajah N yang boleh dilihat ialah sekurang-kurangnya X.

Tatabahasa

Sebelum kita mendalami kaedah ini, mari kita fahami sintaks kaedah yang akan kita gunakan dalam kod berikut -

bool checkVisibleSum(int N, int X, vector<int>& dice);
Salin selepas log masuk

Kaedah 1

Algoritma

  • Mula-mula, mulakan pembolehubah visibleSum kepada 0. Pembolehubah ini akan menyimpan jumlah muka yang boleh dilihat.

  • Lelaran melalui setiap elemen dalam vektor dadu.

  • Untuk setiap die, susun muka dalam tertib menurun.

  • Tambah muka terbesar (elemen pertama selepas mengisih) pada visibleSum.

  • Jika pada bila-bila masa, visibleSum menjadi lebih besar daripada atau sama dengan X, kembalikan benar.

  • Jika tiada jumlah kelihatan lebih besar daripada atau sama dengan X ditemui selepas lelaran selesai, kembalikan palsu.

Contoh

#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;
}
Salin selepas log masuk

Output

The maximum sum of visible faces of the dice is not at least 15.
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam kod ini, kami mula-mula mentakrifkan fungsi checkVisibleSum, yang menerima tiga parameter: N (bilangan dadu), X (jumlah minimum) dan dadu (vektor yang mewakili vektor muka dadu).

fungsi checkVisibleSum melaksanakan kaedah 1. Ia memulakan pembolehubah visibleSum kepada 0, yang digunakan untuk menyimpan jumlah muka yang boleh dilihat. Kemudian ia berulang pada setiap dadu dalam vektor dadu. Untuk setiap dadu, ia mengisih muka dalam tertib menurun menggunakan isihan(dadu[i].rbegin(), dadu[i].rend()). Ini memastikan muka terbesar berada pada permulaan vektor yang diisih.

Kod itu kemudian menambah bahagian terbesar die semasa kepada visibleSum menggunakan visibleSum += dadu[i][0]. Dengan menggunakan fungsi ini, seseorang boleh lebih memahami peristiwa tertentu yang mungkin berlaku dalam sebarang situasi tertentu.

Ini boleh dilihat dengan menganalisis sama ada visibleSum yang diberikan melebihi atau sama dengan X pada pelbagai titik semasa analisisnya. Jika kemungkinan ini ditemui semasa menjalankan kajian - biasanya ditunjukkan oleh output yang benar - maka mereka boleh membuat kesimpulan dengan tahap kepastian tertentu bahawa bilangan maksimum ciri yang boleh diperhatikan adalah sama atau lebih besar daripada niat asalnya untuk melebihi X.

Sebaliknya, jika mereka masih tidak menemui statistik tersebut selepas beberapa penerokaan dengan lelaran dan pengiraan yang berkaitan, maka terdapat lebih banyak soalan yang belum dijawab.

Dalam fungsi utama, kami menggesa pengguna memasukkan nombor dadu (N). Kami mencipta vektor vektor yang dipanggil dadu untuk menyimpan muka setiap dadu. Kami kemudian mengulangi N kali, dan untuk setiap mati, gesa pengguna untuk bilangan muka dan wajah itu sendiri. Kami menyimpan nilai ini dalam vektor dadu.

Seterusnya, kami meminta pengguna memasukkan jumlah minimum (X). Kami menghantar N, X dan dadu ke fungsi checkVisibleSum. Oleh itu, kami akan menyampaikan mesej bahawa jumlah maksimum muka die yang boleh dilihat adalah sama dengan atau lebih besar daripada X. Walau bagaimanapun, bertentangan dengan pandangan positif situasi ini, kami berkemungkinan mengeluarkan pengetahuan sebagai hasil pembelajaran bahawa fungsi itu sebenarnya menghasilkan keputusan yang tidak diingini berkaitan dengan X.

Kaedah 2

Algoritma

  • Mula-mula, mulakan pembolehubah visibleSum kepada 0. Pembolehubah ini akan menyimpan jumlah muka yang boleh dilihat.

  • Lelar melalui setiap elemen dalam vektor dadu.

  • Untuk setiap die, susun muka dalam tertib menurun.

  • Kira jumlah muka N-1 pertama (tidak termasuk muka terbesar) dan tambahkannya pada visibleSum.

  • Kembalikan benar jika visibleSum menjadi lebih besar daripada atau sama dengan X.

  • Jika tiada jumlah kelihatan lebih besar daripada atau sama dengan X ditemui selepas lelaran selesai, kembalikan palsu.

Contoh

#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;
}
Salin selepas log masuk

Output

The maximum sum of visible faces of the dice is at least 15.
Salin selepas log masuk
Terjemahan bahasa Cina bagi

Penjelasan

ialah:

Penjelasan

Dalam kod ini, kami mempunyai fungsi checkVisibleSum yang sama seperti dalam kaedah pertama. Walau bagaimanapun, perbezaan utama terletak pada pengiraan jumlah yang boleh dilihat.

Kaedah 2 menjumlahkan muka N-1 pertama setiap die, tidak termasuk muka terbesar. Untuk mencapai ini, kami menggunakan fungsi terkumpul daripada perpustakaan Kami menghantar dadu[i].begin() dan dadu[i].begin() + N - 1 sebagai julat untuk terkumpul, menjumlahkan dengan berkesan ke atas muka yang diperlukan.

Selebihnya kod dalam fungsi utama adalah sama seperti contoh sebelumnya.

KESIMPULAN

Melalui artikel ini, topik kami berkisar tentang menyelesaikan isu penting tentang pengekodan C++. Bagaimana untuk mengetahui dengan tepat jika jumlah muka terbesar yang boleh dilihat bagi set dadu (N) yang diberikan ialah sekurang-kurangnya X? Dalam menjawab soalan ini, kami menemui dua penyelesaian praktikal: pertama, pastikan jumlah hasil setiap gulungan dadu sama atau melebihi X kedua, hanya nilaikan jumlah gulungan dadu N-1 yang pertama, dan Tentukan sama ada ia sepadan atau melebihi X. Selain itu, kami menyediakan persediaan kod untuk setiap kaedah dan panduan terperinci untuk melaksanakan prosedur ini. Selain itu, kami menyediakan dua contoh kod sebenar yang boleh dilaksanakan sepenuhnya berdasarkan kaedah ini. Dengan memanfaatkan pengetahuan dan kod yang disediakan dalam artikel ini, anda kini boleh menyelesaikan masalah menentukan sama ada jumlah muka terbesar N dadu yang boleh dilihat ialah sekurang-kurangnya X dalam pengaturcaraan C++.

Atas ialah kandungan terperinci Semak sama ada jumlah maksimum muka kelihatan N dadu ialah sekurang-kurangnya X. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan