0

要在 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

eg 2 in detail + 如果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
               }

           }
        }
   }

}
4

1 回答 1

1

How to find the array that's different from all the others? By comparing each to the first array. Because you can't tell which is the odd-one-out if the first two are different, special-case code is needed.

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;
}
于 2013-02-10T16:07:10.273 回答