在所有比赛中找到一对赛车手,其中赛车手`a`击败了赛车手`b`

时间:2016-09-23 17:11:24

标签: c++

我遇到了挑战,我想请你指点一下。我有数字n(参赛者数量)和两行包含n整数(整数实际上代表赛车)。这些线代表赛手结束比赛的顺序。

我必须找到所有双打/对,其中赛车a在两场比赛中击败了赛车b。你能引导我一点吗?

实施例

Input : 
3
1 2 3
2 3 1
Output :1 (only 2 and 3 have met the condition)

1 个答案:

答案 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获取输入的方式。无论哪种方式,您将留下一个向量或种族,每个向量或种族都是正确顺序的结果向量。我认为这应该足以让您入门,但如果您需要任何其他代码或使用此代码的帮助,我可以提供帮助。