我有一个挑战,我想请你们引导我一点。我有号码n
(赛车手数量)和两行包含n
整数(整数实际上代表车手)。这些线代表赛车手结束比赛的顺序。寻找在所有比赛中赛车手a'击败赛车手b'的赛车手
我必须找到所有的双打/双,其中一场比赛的运动员a
在两场比赛中都击败了赛车手b
。你能指导我一下吗?
例
Input :
3
1 2 3
2 3 1
Output :1 (only 2 and 3 have met the condition)
我有一个挑战,我想请你们引导我一点。我有号码n
(赛车手数量)和两行包含n
整数(整数实际上代表车手)。这些线代表赛车手结束比赛的顺序。寻找在所有比赛中赛车手a'击败赛车手b'的赛车手
我必须找到所有的双打/双,其中一场比赛的运动员a
在两场比赛中都击败了赛车手b
。你能指导我一下吗?
例
Input :
3
1 2 3
2 3 1
Output :1 (only 2 and 3 have met the condition)
首先,找到一个数字的长度是很简单的。在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获取输入的方式。无论哪种方式,您都会留下一个或多个种族,其中每个种族都是结果的向量,按照正确的顺序排列。我认为这应该足以让你开始,但如果你需要其他代码或代码的帮助,我可以提供帮助。
谢谢,这个作品就像一个魅力。但是有没有更有效的检查方法?因为如果我使用线性搜索,它将不得不循环多次。检查第一名车手有多少对,然后是第二名,第三名等。 –
@ Roi lam我很高兴代码能够工作,但我认为线性搜索将是最高效的,即使是大型比赛。 – TGrossb
什么是一个整数的“长度”? “找双打”是什么意思? –
对不起,它的意思是n行整数 –
简单,把整数看作字符串。使用'std :: string :: length()'。 –