1

こんにちは、私はこの配列を持っています。重複している要素の数と残りの要素を調べようとしています。しかし、それが異なる結果を示している問題。これをチェックしてください

#include <stdio.h>
#include <stdlib.h>

#define SIZE 30

int const arr_1[SIZE] = {3,4,3,7,4,90,45,23,57,68,23,14,57,
                   34,20,39,18,3,2,23,45,67,89,68,12,34,56,78,3
                   };



int main()
{

  int i,j,yes=0, no=0;

  for(i=0;i<SIZE;i++)
  {
     for(j=0; j<SIZE; j++)
     {
        if(arr_1[i] == arr_1[j])

              yes++; 
         else 

           no++;   

     }

  }

  printf("temp: %d\t Not: %d\n",yes,no);

  system("PAUSE");
  return 0;
}
4

3 に答える 3

0

あなたtempnot変数はどうですか?yesとを使いませんnoか?

実際にはアルゴリズムを修正する必要があります:

for (i = 0; i < SIZE; i++)
{
    int notfound = 0;
    for (j = i + 1; j < SIZE; j++)
    {
        if (arr_1[i] == arr_1[j])
        {
            yes++; 
            notfound = 1; //found, no need to iterate anymore
            break;
        }
    }
    if (notfound == 0) //and we know that element isn't duplicate only here
        no++;
}
于 2013-03-05T12:07:05.157 に答える
0

問題は、要素の各ペアを 2 回比較していることです。たとえば、 を比較arr_1[1] == arr_1[2]していますが、ループの後半で も比較するarr_1[2] == arr_1[1]ため、結果は 2 回カウントされます。さらに、 elementiと elementを比較していますがi、これは常に同じです。これを修正するには、次のように変更する必要があります。

for(j=0; j<SIZE; j++)

for(j=i+1; j<SIZE; j++)

このように、2 番目のループは最初のループの現在のインデックスから開始し、各ペアを 1 回だけチェックします。

于 2013-03-05T12:08:24.450 に答える
0
 #include <stdio.h>
    #include <stdlib.h>

    int arr_1[30] = {3,4,3,7,4,90,45,23,57,68,23,14,57,34,20,39,18,3,2,23,45,67,89};
    int main()
    {

      int i,j,yes=0;
      for(i=0;i<23;i++)
      {
      yes=0;

         for(j=0; j<23; j++)
         {
            if(i==j){continue;}
            if(arr_1[i] == arr_1[j])
                yes++; 


         }
         if(yes==0)
             { printf("\n%d unique element",arr_1[i]);
              }
         else
              { printf("\n%d repeat %d time(s) " ,arr_1[i],yes);}

      }



  return 0;
}

ここに画像の説明を入力

于 2013-03-05T12:31:38.250 に答える