两个数组与C的比较

时间:2015-12-12 14:54:39

标签: c arrays

我正在研究学校问题。我应该比较两个数组,找出不匹配和完美匹配的数量。示例:我有Array [4] = {8,4,8,8}和ArrayB [4] = {4,8,8,4}。它应该打印出1个完美匹配和3个不匹配。我的代码是这样的:。完美匹配有效,但不匹配则无效。请帮助:Mis_match表示它具有SAME值但在阵列中的不同位置。完美匹配意味着它具有SAME值和两个阵列中的相同位置。

Route::get('api/{locale?}/my-url', 'MyController@myAction');

4 个答案:

答案 0 :(得分:1)

你似乎在这里犯了一些错误。第一:

int perfect, mis_match; // need to be intialized.

所以你必须将它们设置为0

int perfect = 0;
int mis_match = 0;

您还必须注意:if(A[m]=B[m])(在您的第一个循环中)应为if(A[m]==B[m])(您的比较运算符错误)。

在第二个不匹配集中,如果数组大小相同,那么您可以简单地执行array length - matches = mismatches因为如果它不匹配,那就是不匹配。

答案 1 :(得分:0)

代码:

int a[4] = {8,4,8,8};
int b[4] = {4,8,8,4};
int mc = 0;
for(int i=0; i < 4; ++i)
  if (a[i] == b[i])
    ++mc;
printf("we have %d perfect matches, %d mismatches", mc, 4 - mc);

答案 2 :(得分:0)

无论我理解什么,你都不需要使用任何嵌套循环,这会增加时间复杂度。我认为这很简单 这是代码 -

int main(){
int A[4] = {8,4,8,8};
int B[4] = {4,8,8,4};
int perfect = 0;
int mis_match = 0;
for ( int i = 0; i < 4; i++ ){
    if( A[i] == B[i] )
        perfect++;
    else
        mis_match++;
}

printf("we have %d perfect matches, %d mismatches", perfect,mis_match);

答案 3 :(得分:0)

首先,您需要将变量mis_match初始化为0。你实际上甚至不需要这个变量。您只需使用第二个数组的每个元素检查第一个数组的每个元素,如果它们匹配,则递增perfect。然后计算数组大小和perfect之间的差异。这是不匹配的数量。  您修改后的代码应如下所示

int perfect=0,m=4;
int A[4]={8,4,8,8},B[4]={4,8,8,4};
for(i=0;i<m;i++)   
{
    if(A[i]==B[i])  
        perfect++;
}
printf("We have %d perfect matches and %d mismatches",perfect,m-perfect);

您使用了if(A[m]=B[m]),这是错误的。此语句将在B[m]中分配A[m]的值,而不是检查它们是否相等。您需要使用==运算符来检查它们的相等性。