0

从这段代码:

节点[4] = {5,3,2,6};

邻居[4] = {4,3,2,9};

我必须找到:

节点[0] ==匹配来自邻居[0-3]的值和节点[1] ==匹配来自邻居[0-3]的值

节点[1] ==匹配来自邻居[0-3]的值和节点[2] ==匹配来自邻居[0-3]的值

节点[2] ==匹配来自邻居[0-3]的值和节点[3]==匹配来自邻居[0-3]的值

如果其中任何一个满足,则打印元素找到否则不...

我已经尝试过这段代码,它的结果元素找到了..

但是当我保持节点 [4] 相同并且邻居 [4] 是不同的值 {4,9,7,9};

我仍然得到元素找到的结果

#include<stdio.h>


int main()
{
    int node[4] = {5,3,2,6};
    int neighbor[4] = {4,3,2,9};
    int i,flag=0,k=0;

    for (k=0;k<3;k++){
        for (i = 0; i < 4; i++) {
            if ((node[k]==neighbor[i]) && (node[k+1]==neighbor[i]));
            flag=1;
            break;
        }
    }
    if (flag==0)
    printf("Element not found\n");
    else
    printf("Element  found\n");
}
4

2 回答 2

3

你有一个基本错误

for (k=0;k<3;k++){
        for (i = 0; i < 4; i++) {
            if ((node[k]==neighbor[i]) && (node[k+1]==neighbor[i]));
            flag==1;
            break;
        }

更正

for (k=0;k<3;k++){
        for (i = 0; i < 4; i++) {
            if ((node[k]==neighbor[i]) && (node[k+1]==neighbor[i]));
            flag=1;
            break;
        }

错误 标志的更正=1;

于 2012-12-25T14:20:36.823 回答
2

您的问题是声明;之后if

            if ((node[k]==neighbor[i]) && (node[k+1]==neighbor[i]));

这意味着条件没有被使用并且flag = 1;一直在运行。去除;

你必须初始化flag为0:

   int i,flag=0,k=0;

顺便说一句:我会仔细检查你的算法。node[0] ==match values from neighbor[0-3] and node[1] ==match values from neighbor[0-3]我将其读作“如果节点 0 匹配邻居中的任何内容,并且节点 1 匹配邻居中的任何内容”

但是您将其编码为“如果节点 X 和节点 X+1 在邻居中匹配相同的一个值”


你想要的算法很容易构造,如果node[X] == anything in neighbor[]然后检查是否node[x+1] == anything in neighbor[]

因此,要编写知道每个数组是数组中的 4 个元素的代码,您可以执行以下操作,注意这是未经测试的,但这是一个球场的想法

int main()
{
    int i;
    for(i = 0; i<3; i++)  // loop from the [0]th to the [2]nd element
    {
        if(is_in_array(node[i], neighbor))   // if the element in node is anywhere in neighbor
            if(is_in_array(node[i]+1, neighbor)) {  // check the next element
                flag = 1;  // if both are in there set the flag
                break;     // and leave the loops early
            }
    } 

    // insert your "if flag print" logic here.

    return 0;
}

int is_in_array(int needle, int haystack[])
{
    int found_it = 0;
    int counter;
    for(counter = 0; counter < sizeof(haystack)/sizeof(int); counter++)
        if(haystack[counter] == needle)
            found_it = 1;
    return found_it;
}
于 2012-12-25T14:44:49.920 回答