首页 > 解决方案 > 在C中的数组中查找所有父ID

问题描述

我必须找到所有的父母,例如我搜索所有 ID 为 10 的 PID 和 PPID。

如果 PID 有 id,例如让我们取 10,我打印printf("%d %d", PID[i], PPID[i])并完成。

问题是如果 PPID 的 id 为 10,那么我也打印它 ( printf("%d %d",PID[j],PPID[j])),但现在我还必须找到所有具有新 id PID[J] 的 PID 和 PPID。id 为 10 的示例 PPID 位于索引 3 处,我打印 (PID[3] , PPID[3]) 并且也在索引 7 处。PID[3] 是 13,PID[7] 是 31,所以现在我有 2 个新的 IDS 并且必须重新执行程序。

我不知道如何编程。可能是递归函数?但是不知道怎么写(什么时候停止,怎么调用)。

我确实尝试过循环(非递归),但我的程序卡住了,我是否也应该把代码放在这里?如果用循环写我需要某种堆栈

#include<stdio.h>

int recursion() {  
    return 0;
}  

int main() {
    int PID[10]={1,15,10,13,44,28,30,31,50,17};
    int PPID[10]={0,3,20,10,18,7,13,10,30,47};
    int findID=10; 

    recursion();

    //result should be following pairs: 10|20 ; 13|10 ; 30|13 ; 31|10 ; 50|30
}

标签: c

解决方案


如果 PID 和 PPID 数组大小相同,则答案如下。

#include<stdio.h>

void find(int id,int arr1 [],int arr2 [],int size,int notId) { 
    for(int i=0;i<size;i++){
        if((arr1[i]==id || arr2[i]==id) && arr1[i]!=notId && arr2[i]!=notId) {
            printf(" %d | %d;",arr1[i],arr2[i]);
            if(arr1[i]!=id){
              find(arr1[i],arr1,arr2,size,id);
            }
        }
    }

}  

int main() {
    int PID[10]={1,15,10,13,44,28,30,31,50,17};
    int PPID[10]={0,3,20,10,18,7,13,10,30,47};
    int size = sizeof(PID)/sizeof(PID[0]);
    int findID=10; 
    find(findID,PID,PPID,size,0);
    return 0;
}

推荐阅读