Tidemanの投票機能(CS50のpset 3)
Aug 23 2020
私は投票機能に対処しようとしていますが、あなたの助けを求めたい2つの質問があります。
- 投票関数の定義には、次のものがあります。
bool vote(int rank, string name, int ranks[])
ランクパラメータの目的と、なぜここで宣言されているのかわかりません。
- 投票機能の私の解決策は次のとおりです。
// Update ranks given a new vote
bool vote(int rank, string name, int ranks[])
{
for (int j = 0; j < candidate_count; j++)
{
for (int k = 0; k < candidate_count; k++)
{
//Compare the name provided by the user with the name of the candidates numbered jth in the array candidates[MAX] which already populated above
if (strcmp(name, candidates[k]) == 0)
{
ranks[j] = k;
printf("ranks[%d] = %d\n", j, k);
}
}
return true;
}
return false;
}
次のようなprintf関数の結果(候補= {a、b、c}、voter_count = 2):
ランク1:a、ランク[0] = 0; ランク2:b、ランク[0] = 1; ランク3:c、ランク[0] = 2; ランク1:c、ランク[0] = 2; ランク2:b、ランク[0] = 1; ランク3:a、ランク[0] = 0
ランク[j]のjの値は更新されませんでした。この問題を解決するにはどうすればよいですか?
あなたの助けをどうもありがとう!
回答
ManavDubey Aug 23 2020 at 23:35
ここにいくつかのコードがあります:
// Update ranks given a new vote
bool vote(int rank, string name, int ranks[]){
//We want to cycle through the list of candidates given
for(int i = 0; i < candidate_count; i++){
//If the candidate(s) in the array matches with string name, we will continue
if(strcmp(candidates[i], name) == 0){
//This is the tricky part to understand. Read below for answer.
ranks[rank] = i;
return true;
}
}
return false;
}
int rank
候補者に対するユーザーの指定されたランクを表し、int i
の候補者の位置を表しますcandidates[]
。ranks[]
正しいランクに合わせて更新したい。これはまだ理解するのがかなり混乱しているので、ここに例があります。
ジョン、ジム、サム、アレックスの4人の候補者がいます
で
string candidates[MAX];
、ジョンはにcandidates[0]
、ジムはにcandidates[1]
、サムはにcandidates[2]
、アレックスはにいcandidates[3]
ます。
ユーザーが投票し、次の順序で投票するとします。
- アレックス
- ジョン
- ジム
- サム
で実行してみましょうbool vote(int rank, string name, int ranks[])
。
vote(j, name, ranks)
ここで、j = 0、name = Alex、およびranksはranks []です。- で見つかるまで、名前Alexをループし
candidates[MAX]
ます。- Alexは
candidates[i]
i = 3の場所にあります。- 更新したい
ranks[]
ranks[rank] = i;
つまり、atranks[rank]
は3であるiに等しいということです。言い換えると、ranks [0]はcandidates[MAX]
。のAlexのi番目の位置に等しいということです。
次に、すべての投票者のランキングが完了するまで、このサイクルを繰り返します。