[英]Generate random sport game result c++
我被要求編寫一個程序,以生成涉及10個國家/地區的10個體育比賽的隨機結果,並根據結果顯示獎牌總數。
我能夠生成游戲的結果,但不知道如何總結結果(即每個國家獲得的不同獎牌的數量)。
以下是我生成隨機游戲結果的代碼的一部分。
const string ctry[] = {'A','B','C','D','E','F','G','H','I','J'}; //country name
int main()
{
string gctry[10]; //gold
string sctry[10]; //silver
string bctry[10]; //bronze
for (int i = 0; i < 10; i++)
{
gctry[i] = country[(rand() + time(0))%10];
sctry[i] = country[(rand() + time(0))%10];
bctry[i] = country[(rand() + time(0))%10];
}
}
我需要一些建議來解決這個問題。 謝謝。
您將需要遍歷獎牌陣列並確定每個陣列中每個國家有多少個實例,因此如果您遍歷金牌陣列。
如何執行此操作取決於您。
例如,如果您遍歷GoldArray並找到3個國家“ B”的實例,那么它們就有3枚金牌。 您可以提供一個簡單的解決方案,其中每個國家都有一個櫃台。
int CountryAGoldM;
每次您擊中數組中的國家“ A”時,都會將CountryAGoldM加1,我認為這是家庭作業。
將來,您將看到其他方法來更有效地重寫它,但我認為您只是在學習,因此在這種情況下,簡單的解決方案始終是最好的:P
您無需在每個rand()結果中添加time(0)。 而是使用srand(time(0))
。
您的方法可以使同一國家獲得多個獎牌。
您可以使用std :: map來計數獎牌。 無需將任何中間結果存儲在gctry,sctry和bctry中。
您可以為此使用std :: count(),同時遍歷各個國家/地區(盡管我更喜歡使用stl容器):
std::cout << country << ": gold " << std::count(gctry, gctry+10, country);
我知道我不應該這樣做,但是有時候您可以通過閱讀代碼來學習;)
#include <iostream>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
int main()
{
const int nCountries = 7;
string countries[nCountries] = { "C1", "C2", "C3", "C4", "C5", "C6", "C7" };
map<string, int> goldMedals, silverMedals, bronzeMedals;
const int nTrials = 10;
for (int i = 0; i < nTrials; ++i)
{
// generate random results for current trial
random_shuffle(countries, countries + nCountries);
++goldMedals [countries[0]];
++silverMedals[countries[1]];
++bronzeMedals[countries[2]];
//copy(countries, countries + nCountries, ostream_iterator<string>(cout, "\n"));
//cout << "====================" << endl;
}
// sort by medals
const int medalMultiplier = nTrials + 1;
auto medalValue = [&](const string& c)
{
return goldMedals[c] * medalMultiplier * 2 + silverMedals[c] * medalMultiplier + bronzeMedals[c];
};
sort(countries, countries + nCountries, [&](const string& c1, const string& c2) { return medalValue(c1) > medalValue(c2); } );
// output
cout << "Results: \n";
for (auto c = countries; c != countries + nCountries; ++c)
{
cout << *c << " g" << goldMedals[*c] << " s" << silverMedals[*c] << " b" << bronzeMedals[*c] << endl;
}
}
您有兩個要解決的問題。 您沒有提到其中一個:
問題1
您需要顯示獲得的獎牌總數。 這些金額將按國家/地區和獎牌類型分組,但不會按游戲分組。
您已經創建了國家列表和三個陣列,每種獎牌類型一個。 這些數組的索引是游戲,而這些數組的值是贏得相關獎牌的國家/地區。
解決方案1
解決此問題的一種方法是遍歷兩個嵌套循環。
對於每個國家/地區,在國家/地區循環中啟動金牌,銀牌和銅牌的計數器。
然后,對於每場比賽,檢查他們是否是金牌,銀牌或銅牌的獲勝者,如果是,則將其加到相應的計數中。 完成所有游戲后,請打印出當前國家/地區贏得的每種類型的獎牌數。
然后繼續下一個國家。
問題2
一個國家能否在一場比賽中贏得兩枚不同的獎牌? 如果沒有,您將如何解決?
解決方案2
由於您沒有直接提出這個問題,所以我不會提出解決方案。 但是您可以考慮如何生成唯一的組合(例如概率數學類),然后選擇一個隨機組合。 您想做10選3。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.