0

このコードから、

node[4] = {5,3,2,6};  
neighbor[4] = {4,7,8,9};

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

  • node[0]からnode[1]の一般的な値がありますneighbor[0-3]
  • またはnode[1]node[2]からの共通の値がありますneighbor[0-3]
  • またはnode[2]、node[3]にはneighbor[0-3]

誰かが他に見つからない印刷要素を満たしている場合...
私はこのコードを試しましたが、エラー状態のセグメンテーション違反があります。

#include<stdio.h>

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

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

3 に答える 3

3

配列の範囲外にアクセスしています。

sub=k+1;

これを使用して、kを4に設定し、後続のループでにアクセスしますnode[sub]。の有効なインデックスは0〜3のみですnode


範囲外のメモリへのアクセスは未定義の動作です。あなたはおそらく両方のループから抜け出すつもりでした。

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

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

forループの条件に注意してくださいsub < 4。範囲外にアクセスしないようにするためです。


#include<stdio.h>

int present(int x, int y, int N[])
{
  int i, c=0;
  for(i=0;i<4;i++)
  {
      if(N[i]==x) c++;
      if(N[i]==y) c++;
  }
  if (c==2) return 1;
  return 0;
}

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

    for (k=0;k<3;k++){
        if (present(node[k], node[k+1], neighbor)) {
           flag = 1;
           printf("Element found");
           break;
        }
    }
    if(flag == 0) 
       printf("Element not found");

    return 0;
}
于 2012-12-25T15:18:23.387 に答える
1

subが未定義/未設定の場合、がにflag設定されない場合は1、基本的に初期化されていない値をインデックスとして使用しているため、プログラムはポイント先から読み取りを行います。

于 2012-12-25T15:18:03.247 に答える
0

完全なソリューションは次のとおりです。

#include <stdio.h>
int main()
{
    int node[4] = {5,3,2,6};
    int neighbor[4] = {4,3,2,9};
    int i=0,j=0,k=0;

    for (i=0; i<4; i++) {
        for (j=0; j<4; j++) {
            if (node[i]==neighbor[j]) {
                for (k=0; k<4; k++) {
                    if (node[i+1]==neighbor[k]) {
                        printf("Element found: %d %d\n", node[i], node[i+1]);
                        return 0;
                    }
                }
            }
        }
    }
    printf("Element not found\n");
    return 0;
}
于 2012-12-25T15:20:38.650 に答える