考虑下面的表格,其中(目的地,路线)映射到Node
。
Destination_id(a) route_id(b) next_node(c)
4 1 6
7 1 9
7 2 8
8 4 4
7 3 2
的示例:
Given input (Destination_id, route_id) : (7,3)
Expected output : 2
Given input (Destination_id, route_id) : (4,1)
Expected output : 2
换句话说,表中的有效映射将是:
Input Ouput
(4, 1) -> 6
(7, 1) -> 9
(7, 2) -> 8
(8, 4) -> 4
(7, 3) -> 2
我编写的代码,我正在获得完美的输出。有没有其他有效的方法来实现这个??
#include<stdio.h>
int main()
{
int i,store;
int a[5]={4,7,7,8,7};
int b[5]={1,1,2,4,3};/// this will be always unique with respect to the search element of 'a' for eg.<7,1>, <7,2>
int c[5]={6,9,8,4,2};
int found_indices[5]; // array used to store indices of found entries..
int count = 0; //n entries found;
int ele_a, ele_b;
printf("Enter the element to be search in array a\n");
scanf("%d",&ele_a);
printf("Enter the element to be search in array b\n");
scanf("%d",&ele_b);
// searching for the element
for (i=0; i<5; i++)
{
if (a[i]==ele_a)
{
found_indices[count ++] = i; // storing the index of found entry
}
}
if (count!=0) {
for (i=0; i<count; i++)
{
if (b[found_indices[i]]==ele_b)
{
store=found_indices[i];
}
}
}
printf("Element found %d ", c[store]);
}
答案 0 :(得分:0)
试试这个:
for (i = 0; i < 5; i++) {
if (a[i] == ele_a && ele_b == b[i]) {
printf("Element found %d ", c[i]);
break;
}
}
如果映射表很大,那么散列表就是最佳选择。
答案 1 :(得分:0)
您的程序可能会因某些其他输入而崩溃。因为store
未初始化为零。在这种情况下,考虑if (b[found_indices[i]]==ele_b)
这种情况永远不会成功,最后在printf
陈述中,c [store]会导致崩溃。
访问c
语句本身内的if
数组。
int c_value = 0;
....
if (b[found_indices[i]]==ele_b)
{
c_value=c[found_indices[i]];
}
....
if (!c_value)printf("Element found %d ", c_value);
注意:我希望您不要将0
作为c
数组中的元素之一。