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

例 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
               }

           }
        }
   }

}
4

1 に答える 1

1

他のすべてとは異なる配列を見つける方法は? それぞれを最初の配列と比較します。最初の 2 つが異なる場合、どちらが奇数 1 アウトか判断できないため、特別なケースのコードが必要です。

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 に答える