c - 在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
}
解决方案
如果 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;
}
推荐阅读
- c - 如何在 C 语言的 char 数组中获取退格字符并基于退格字符执行 IF 条件?
- python - 如何将使用 Xlsx 编写器创建的论坛中的值读入 Pandas 数据框?
- c++ - 不使用paintGL函数之外的鼠标事件绘制形状 - QT OpenGL C++
- python - 使用布尔掩码用 numpy 数组对象填充 numpy 数组
- r - 用名称替换地区编号
- vb.net - Visual Basic 中未使用的项目引用
- regex - 使用正则表达式删除文本直到匹配字符串
- hibernate - 使用复杂 DTO 管理复杂查询的最佳方法
- regex - 如何使用正则表达式仅返回第 n 个匹配项?
- c++ - 向量的分配向量