C++ 阵列最佳匹配

C++ 阵列最佳匹配,c++,arrays,algorithm,C++,Arrays,Algorithm,你被要求为婚姻美貌写一个配对节目。Beaureu的问卷有8个陈述,申请人在1到5分的范围内表示其同意程度。申请人的答复通过键盘输入。每个回答包含申请人的代码、性别F或M以及对问卷的回答8个整数。 你可以假设申请者不超过50人。你的计划应该将每个人与3个最适合的异性匹配,并打印申请人的代码号和潜在申请人的代码号 我想通过C++实现这个。这有什么匹配算法吗?。或者有一些简单的方法。如果你能写出整个函数,那对我来说就太好了 对不起,如果问题很简单,我是一个学习者。根据我们上面的评论,我将发表一些评论,

你被要求为婚姻美貌写一个配对节目。Beaureu的问卷有8个陈述,申请人在1到5分的范围内表示其同意程度。申请人的答复通过键盘输入。每个回答包含申请人的代码、性别F或M以及对问卷的回答8个整数。 你可以假设申请者不超过50人。你的计划应该将每个人与3个最适合的异性匹配,并打印申请人的代码号和潜在申请人的代码号

<>我想通过C++实现这个。这有什么匹配算法吗?。或者有一些简单的方法。如果你能写出整个函数,那对我来说就太好了


对不起,如果问题很简单,我是一个学习者。

根据我们上面的评论,我将发表一些评论,让您开始学习。但请记住,最好的办法是自己尝试一些东西,然后再寻求帮助

int questionnaire_answers[50][8]; // 2D array holding answers
int sex[50];                      // 1D array holding sex of those who answered

int i, j;
int index = 0;
int best = 999999;
int distance;

// We look for the best match for the first person
for (i = 1; i < 50; i++)
{
    if (sex[0] != sex[i])
    {
       // Calculate the distance from index 0 to index i
       // See note below
       distance = 0;
       for (j=0 ; j < 8; j++)
       {
          distance = distance + abs(questionnaire_answers[0][j]-questionnaire_answers[i][j]);
       }
    }
    else
    {
       distance = 999999;
    }
    if (distance < best)
    {
       best = distance;
       index = i;
    }
}

// Now index holds the index of the best match
我将让您找出如何找到第二和第三个最佳匹配:

重要: 我使用了一个简单的线性距离计算。在现实世界中,你可能会用更复杂的东西做得更好。数学界有几个好的选择,例如最小均方误差/最小均方误差


玩得开心

您可以使用。首先标准化50X8矩阵,使每列的平均值为0,标准偏差为1。现在,对于每个记录行,计算与每个其他记录的余弦相关性。给出最大余弦相关性的记录将是该记录的匹配。< /P>如果你想要C++实现,为什么要使用C标记?C!=C++,开始自己编写一个小程序。例如,声明数组。尝试迭代它。只是。。。那我们就可以帮忙了。你不是通过让我们做作业来学习的。你通过尝试和失败来学习。然后在别人的帮助下指出失败。祝你好运。@nielsen:k。但是你能分享一下逻辑吗?我不确定我在说什么-你是在寻找数组中最接近给定输入元素x的元素吗?这可以用线性扫描很容易地完成,或者如果你的数组已经用二进制搜索排序了。@m0rphes:好的-只是一点启动帮助。int-arr[5]={3,7,12,5,9};int i,diff=-1;对于i=0;i<5;i++{…};abs的功能可能很有用!这有用吗?