要在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
}
}
}
}
}
答案 0 :(得分: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;
}