0

このコードから:

ノード[4] = {5,3,2,6};

隣人[4] = {4,3,2,9};

私は見つけなければなりません:

node[0] == neighbor[0-3] および node[1] の値と一致 == neighbour[0-3] の値と一致

node[1] == neighbor[0-3] および node[2] の値と一致 == neighbour[0-3] の値と一致

node[2] == neighbor[0-3] からの一致値と node[3]== neighbour[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が隣人の同じ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 に答える