我有以下矢量。 V = {1,2,3,4}
我想找到所有元素对。总的来说,我会有 K(K-1)/ 2 元素。
对= {1,2},{1,3},{1,4},{2,3},{2,4},{3,4}。
Formula: K(K-1)/2 = 4(4-1)/2 = 6 pairs
该算法的伪代码应该是什么。
感谢dasblinkenlight的帮助。我编写了代码,它可能有助于未来:
伪代码:dasblinkenlight
for i in [0..N)
pair.first = data[i] // Set the first element
for j in (i..N)
pair.second = data[j] // Set the second element
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
typedef pair<int,int> pairs;
pairs p;
vector<pairs> pVec;
for(size_t i = 0; i < v.size();i++)
{
p.first = v[i]; // Set the first element
for(size_t j = i+1; j < v.size();j++)
{
p.second = v[j];// Set the second element
pVec.push_back(p); // Add p to vector
}
}
// Print pairs
for(size_t i = 0; i < pVec.size();i++)
{
cout <<"{"<< pVec[i].first <<" "<<pVec[i].second <<"}" <<", ";
}
return 0;
}
答案 0 :(得分:2)
以下是关于如何操作的一般想法:
N
个候选人k
被选为该对中的第一个成员时,该对的第二个成员有N-k
个候选人N*(N-1)/2
使用1
步骤for i in [0..N)
pair.first = data[i] // Set the first element
for j in (i..N)
pair.second = data[j] // Set the second element
来证明对的总数为{{1}}。以下是使用两个循环的方法:
{{1}}
注意:上面的代码使用数学符号表示区间,其中方括号表示在区间中包含相应的结尾,圆括号表示排除相应的结尾。