北理工2011年计算机复试上机题(三)

来源:互联网 发布:淘宝其他来源是什么 编辑:程序博客网 时间:2024/04/28 01:36

题目说明:

给一个字符串(aaaa(bbb(cccc,dddd),eeee(ffff))),该字符串表明的是各个人的层次关系。

如aaaa是bbb和eeee的领导,bbb是cccc和dddd的领导。等等 现要求你输入一个名称如ffff要求你输出其的领导关系  那么就应输出aaaa>eeee>ffff

 

解题思路:

这题很显然用二叉树来做,但由于本人对树感冒,所以想省事用数组来做,结果证明用数组做虽然代码少但是要注意的地方较多。因为需要判断结点的父子关系,并且要记录父亲位置,需要根据括号出现的情况不断判断,输出的时候仍然需要逆序

 

代码:

#include <iostream>#include<string>#include<vector>#include<algorithm>#include <cstring>using namespace std;int main(){string s;int i,k,p,j,m;int temp;char a[1000][10]; //存放结点int b[1000]; //记录某结点父节点位置char upset[10];char answer[1000][10];cin>>s;k=0;p=0;temp=-1;for(i=1;i<s.size();i++){if(s[i]=='('){a[k][p]='\0';b[k]=temp;temp=k;k++;p=0;}else if(s[i]==')'){a[k][p]='\0';b[k]=temp;temp=b[b[k]];//只有在不连续两个“)”时才加K,否则存放的只是空值if(s[i-1]!=')'){k++;}p=0;}else if(s[i]==','){a[k][p]='\0';b[k]=temp;//只有在不连续出现“),”时才加K,否则存放的只是空值if(s[i-1]!=')'){k++;}p=0;}else{a[k][p++]=s[i];}}cout<<"请输入查找字符串:"<<endl;while(cin>>upset){m=0;for(i=0;i<k;i++){if(strcmp(a[i],upset)==0){j=i;strcpy(answer[m++],upset);while(b[j]!=-1){j=b[j];strcpy(answer[m++],a[j]);}}}for(i=m-1;i>0;i--){cout<<answer[i]<<">";}cout<<answer[0]<<endl;}system("pause");return 0;}


 

说明:

这么美好的早上就浪费在这题上了,得不偿失啊,不会用树的后果。

原创粉丝点击