簡體   English   中英

使用C,在N個數組中查找唯一的數組

[英]Using C, To find the unique array among the N arrays

為了在N個數組中找到唯一的數組,請考慮我有3個數組。

    array_1 [ ];
    array_2 [ ];
    array_3 [ ];

    How I approached is;

    I will have set a reference array 

ref_array[] =[values from 1 to 12]

確保所有數組的隨機元素的范圍是1到12。

e.g 1;array_1[7,8,9] , 
array_2[1,2,3,4] , 
array_3[ 2,4,10,11]..
 during the process of array_1 loop (7,8,9 are marked to zero in reference array)
 and in next loop of array_2 (1,2,3,4 are marked to zero in reference array) , 
and in next loop of array_3( 2,4 wont have matching element so store the array num which is three from this example), so array_1 and array_2 are unique among the three arrays

例如,詳細為2 +如果array_1和ref_array之間存在匹配元素,則將相應的ref_array元素標記為零。

    e.g array_1 has three elements[ 7,10,9]

          *array_1  7 is = ref_array 7 then
          mark ref_array[k]=0;
          so that there is no 7 in ref_array

       *array_1 10 is = ref_array 10 then
          mark ref_array[k]=0;
          so that there is no 10 in ref_array

      *array_1  9 is = ref_array 9
          mark ref_array[k]=0;
          so that there is no 9 in ref_array

     + now next array comes into the loop
       e.g array_2 has two elements[ 10, 1]

       *array_2 10is != ref_array [k]

       now element 10 is not found in the reference array

       then store the value of 'i'
       here i is the route num(which is array_num, in this example it is 2)

       array_2  2is = ref_array 2
        mark ref_array[k]=0;

         so that there is no 2 in ref_array.

     + e.g array_3 has three elements[ 2,7,11,10]

       *same procedure follows, element 2,7,10 has no matching to reference array.
        so the value of i is stored (which is array_num, in this example it is 3)

    + solution:
    so the array_1 is unique among the three arrays

需要建議和指導。

我已經嘗試過使用我的代碼,但是解決方案部分出現了問題

#include <stdio.h> 
    struct route{

    int route[6][6];
    int no_routes_found;
    int count_each_route[6];
    };

    int main() {
    struct route *route_ptr, route_store;  
    route_ptr=&route_store;
    int ref_array[13];
    int count_ref_array=13;
    int i,j,k;
    int found_indices[18];
    int index_count=0;
    int store;

    int count=1;
    int random;
    int flag=0;

    // intializing the reference array
    for (i = 0; i < 13; i++)
    {                
        ref_array[i]= count++;         
        printf("\nref_array[%d] = %d", i,ref_array[i]);

      }

    // initializing the structure
    route_ptr->no_routes_found=3;
    route_ptr-> count_each_route[0]=3;
    route_ptr-> count_each_route[1]=2;
    route_ptr-> count_each_route[2]=4;
    for (i = 0; i < 6; i++)
    {
         for (j = 0; j < 6; j++)
         {          

             route_ptr->route[i][j] = rand() % 12 +1;
             printf("\nroute[%d][%d] = %d", i,j,route_ptr->route[i][j]);

          }
      }

    ////  solution part

    for (i = 0; i <(route_ptr->no_routes_found) ; i++)
    {
         for (j = 0; j < route_ptr-> count_each_route[i]; j++)
         {          
            for(k=0;k<(count_ref_array) ;k++)
            {
                if (route_ptr->route[i][j]==ref_array[k])
                {

                    printf("\nroute %dis = ref_array %d",route_ptr->route[i][j], ref_array[k]);
                    // here is where i need the solution
               }

           }
        }
   }

}

如何找到與其他陣列不同的陣列? 通過比較每個與第一個數組。 因為如果前兩個不同,則無法確定哪個是奇數輸出,因此需要特殊情況的代碼。

int equal(int*a0, int *a1, size_t array_elems) {
    return !memcmp(a0, a1, array_elems * sizeof(int));
}            

int unequal_array(int **arrays, int N, size_t array_elems) {
    if (!equal(arrays[0], arrays[1], array_elems))
        return equal(arrays[0], arrays[2], array_elems) ? 1 : 0;
    for (int i = 2; i < N; i++) {
        if (!equal(arrays[0], arrays[i], array_elems)) return i;
    }
    return -1;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM