我遇到了挑战,我想请你指点一下。我有数字n
(参赛者数量)和两行包含n
整数(整数实际上代表赛车)。这些线代表赛手结束比赛的顺序。
我必须找到所有双打/对,其中赛车a
在两场比赛中击败了赛车b
。你能引导我一点吗?
实施例
Input :
3
1 2 3
2 3 1
Output :1 (only 2 and 3 have met the condition)
答案 0 :(得分:0)
首先,找到数字的长度非常简单。在c ++中,使用math.h时只有ceil(log10(number))
。在代码中,您可以使用一个非常简单的函数将数字输入转换为向量。例如:
//input number of racers (int racerNum)
//input number of races (int raceNum)
vector<vector<int>> result(raceNum, vector<int>(racerNum));
for (int race=0; race<raceNum; race++){
//input race results as one string of integers without spaces (int rResult)
int curVal = rResult;
for (int place = racerNum-1, input=0; place >= 0; place--, input++){
curVal = floor(rResult/pow(10,place));
result.at(race).at(place) = curVal;
rResult -= curVal*pow(10, place);
}
}
或者,您可能希望使用之前使用空格输入结果的示例。这将允许你有超过9个赛车手,它可能更简单。它利用了cin将带有空格的字符串分隔成更小字符串的事实。例如:
//get number of racers (int racerNum)
//get number of races (int raceNum)
vector<vector<int>> raceResults;
for (int race=0; race<raceNum; race++){
vector<int> singleResult;
cout << "Results of race " << race+1 << ":";
//get input with spaces
for (int counter=0; counter<racerNum; counter++){
int result;
cin >> result;
singleResult.push_back(result);
}
raceResult.push_back(singleResult);
}
我会推荐第二个例子,但第一个例子也可以。第一种是纯粹的数学方法,第二种方式是利用cin获取输入的方式。无论哪种方式,您将留下一个向量或种族,每个向量或种族都是正确顺序的结果向量。我认为这应该足以让您入门,但如果您需要任何其他代码或使用此代码的帮助,我可以提供帮助。