*/
#include
#include
#include
#include
#include"map.h"
#defineMAXN100
#defineMAXMEM100
#defineElemtypechar
//
//树
typedefstructBiTNode
{undefined
intmark//标记
intlevel
charname[50]//姓名
charbirthday[50]//生日
charaddress[MAXN]//住址
boolmarriage//婚否(true表示结婚,false表示没结婚)
boollive//建在(true表示活着,false表示过世)
boolsex//性别(true表示男,false表示女)
charlivemassage[50]//死亡日期(如果其已经死亡)
Elemtypedata//
structBiTNode*lc,*rc
}BiTNode,*BiTree
//
//树的相关 *** 作
charnametemp[50]//姓名
charbirthdaytemp[50]//生日
charaddresstemp[MAXN]//住址
boolmarriagetemp//婚否(true表示结婚,false表示没结婚)
boollivetemp//建在(true表示或者,false表示过世)
boolsextemp
charlivemassagetemp[MAXN]//死亡日期(如果其已经死亡)
charch//额外使用
intleveltemp//人的代数
intNth//显示第n代人时要用
charsearchdata[50]
charsearchname[50]
intcount//计数
intchoice//各种选择
intuse
BiTreetemp
structBiTNodeList
{undefined
BiTreedata
BiTNodeList*next
}
BiTNodeList*Li
st
voidCreatBiTree(BiTree&T,FILE*in)//建立双链二叉树
{undefined
fscanf(in,"%c",&ch)
//printf("%c\n",ch)
if(ch=='@')
层,意为①重叠起来的东西;重叠起来的东西中的一部分:层次|表层|大气层。②重叠;重复:层峦叠嶂|层出不穷。③量词,用于可以分出层次的事物:三层楼|两层意思|擦掉一层灰。
家谱:又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。家谱是一种特殊的文献,就其内容而言,是中华文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和事迹等方面情况的历史图籍。据研究表明,中华古姓来源于图腾崇拜,系氏族徽号或标志。
#include<stdio.h>#include<string.h>
char w[5][20]={{"child"},{"parent"},{"sibling"},{"descendant"},{"ancestor"}}
int kong(char a[]) {
int n=0,i
for(i=0a[i]!='\0'i++) {
if(a[i]==' ')
n++
else
break
}
return n
}
char fam[200][20]
int num[200]={0}
int search(char a[],int n) {
int i=1
while(1) {
if(!strcmp(a,fam[i]))
return i
i++
}
return 0
}
int search1(int n,int x) {
int i=1
while(i<x) {
if(num[i]==n)
return i
i++
}
return 0
}
char name[1000],word[1000],n1[100],n2[100],d[100]
int main() {
int n,m,i,j,a,b,t,x,k,h
while(scanf("%d%d",&n,&m)!=EOF) {
memset(fam,'\0',sizeof(fam))
memset(num,'\0',sizeof(num))
scanf("%s",fam[1])
getchar()
a=b=2
t=1
num[1]=1
for(i=2i<=ni++) {
memset(name,'\0',sizeof(name))
gets(name)
b=kong(name)
if(b>a) {
if(fam[search1(t*2+1,i)][0]!='\0')
t=t*2+1
else
t=t*2
}
else { if(b<a) {
h=(a-b)/2
while(h>=1) {
t=t/2
h--
}
}}
if(fam[search1(t*2,i)][0]!='\0')
x=t*2+1
else x=t*2
num[i]=x
for(j=bname[j]!='\0'j++)
fam[i][j-b]=name[j]
a=b
}
for(i=0i<mi++) {
gets(word)
k=0h=0
memset(n1,'\0',sizeof(n1))
memset(n2,'\0',sizeof(n2))
memset(d,'\0',sizeof(d))
for(j=0word[j]!='\0'j++) {
if(word[j]==' ') {
k++
h=0
continue
}
if(k==0)
n1[j]=word[j]
if(k==5) {
n2[h]=word[j]
h++
}
if(k==3) {
d[h]=word[j]
h++
}
}
if(!strcmp(d,w[0])) {
a=search(n1,n)a=num[a]
b=search(n2,n)b=num[b]
if(a==b*2||a==(b*2+1))
printf("True\n")
else printf("False\n")
continue
}
if(!strcmp(d,w[1])) {
a=search(n1,n)a=num[a]
b=search(n2,n)b=num[b]
if(b==a*2||b==(a*2+1))
printf("True\n")
else printf("False\n")
continue
}
if(!strcmp(d,w[2])) {
a=search(n1,n)a=num[a]
b=search(n2,n)b=num[b]
if((a==b+1&&a==b/2*2+1)||(a==b-1&&b==a/2*2+1))
printf("True\n")
else printf("False\n")
continue
}
if(!strcmp(d,w[3])) {
a=search(n1,n)a=num[a]
b=search(n2,n)b=num[b]
while(a>0) {
a=a/2
if(a==b) {
printf("True\n")
break
}
if(a==0)
printf("False\n")
}
continue
}
if(!strcmp(d,w[4])) {
a=search(n1,n)a=num[a]
b=search(n2,n)b=num[b]
while(b>0) {
b=b/2
if(a==b) {
printf("True\n")
break
}
if(b==0)
printf("False\n")
}
continue
}
}
}
return 0
}
听说回答的够长能够自动采纳
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)