?? m-in.cpp
字號:
for(j=0;j<buc[tmp3].dnum;j++)
{
if(strcmp(buc[tmp3].dis[j].disease,distable[choose[i]].disease)==0)
{
for(k=0;k<tmp1;k++)
{
distable[choose[i]].pnum--;
buc[tmp3].dis[j].people[buc[tmp3].dis[j].pnum++]=distable[choose[i]].people[distable[choose[i]].pnum];
remain--;
if(distable[choose[i]].pnum==0)
remain_dis--;
}
}
}
}
}
}
}
}
void split(void)
{
int i,j,k,g,h,tmp,tmp2;
int id=1,min,max,minzip,maxzip,zip,znum;
bool flag1,flag2,flagzip,flagznum;
FILE *fptr;
FILE *fptr2;
char old[20];
char newfile[20];
//printf("發布人員文件名稱\n");
//scanf("%s",old);
//printf("匿名結果文件名稱\n");
//scanf("%s",newfile);
itoa(fnum,newfile,10);
strcat(newfile,"ggg.txt");
fnum++;
if((fptr=fopen(newfile,"w"))==NULL)
printf("result 失敗\n");
if((fptr2=fopen("r.txt","w"))==NULL)
printf("匿名結果失敗\n");
//for(i=0;i<bnum;i++) //確定桶內虛擬元素個數
{
if(buc[i].flag==true)
if(buc[i].cnum>buc[i].dis[0].pnum)
buc[i].flag=false;
}
for(i=0;i<bnum;i++) //桶內元素排序
{
if(buc[i].flag==true)
{
for(j=0;j<buc[i].dis[0].pnum;j++)
{
for(k=0;k<buc[i].dnum;k++)
{
for(g=1;g<buc[i].dis[k].pnum;g++)
{
for(h=buc[i].dis[k].pnum-1;h>=g;h--)
{
if(buc[i].dis[k].people[h]==-1)
{
buc[i].dis[k].people[h]=buc[i].dis[k].people[h-1];
buc[i].dis[k].people[h-1]=-1;
}
else if(np[buc[i].dis[k].people[h]].zip>150000&&np[buc[i].dis[k].people[h]].zip<160000)
{
if(np[buc[i].dis[k].people[h-1]].zip>150000&&np[buc[i].dis[k].people[h-1]].zip<160000)
{
if(np[buc[i].dis[k].people[h]].age<=np[buc[i].dis[k].people[h-1]].age)
{
tmp=buc[i].dis[k].people[h];
buc[i].dis[k].people[h]=buc[i].dis[k].people[h-1];
buc[i].dis[k].people[h-1]=tmp;
}
else if(np[buc[i].dis[k].people[h]].age==np[buc[i].dis[k].people[h-1]].age)
if(np[buc[i].dis[k].people[h]].zip<=np[buc[i].dis[k].people[h-1]].zip)
{
tmp=buc[i].dis[k].people[h];
buc[i].dis[k].people[h]=buc[i].dis[k].people[h-1];
buc[i].dis[k].people[h-1]=tmp;
}
}
else
{
tmp=buc[i].dis[k].people[h];
buc[i].dis[k].people[h]=buc[i].dis[k].people[h-1];
buc[i].dis[k].people[h-1]=tmp;
}
}
else
{
if(np[buc[i].dis[k].people[h-1]].zip<150000||np[buc[i].dis[k].people[h-1]].zip>160000)
if(np[buc[i].dis[k].people[h]].zip<=np[buc[i].dis[k].people[h-1]].zip)
{
tmp=buc[i].dis[k].people[h];
buc[i].dis[k].people[h]=buc[i].dis[k].people[h-1];
buc[i].dis[k].people[h-1]=tmp;
}
}
}
}
}
}
}
}
for(i=0;i<bnum;i++) //對桶內元素進行處理
{
if(buc[i].flag==true)
{
flag1=false;
flag2=true;
flagzip=false;
flagznum=false;
for(j=0;j<buc[i].dis[0].pnum;j++)
{
tmp=buc[i].cnum;
for(k=0;k<buc[i].dnum;k++)
{
if(flag1==false)
if(buc[i].dis[k].people[j]==-1)
{
flag1=true;
tmp--;
if(tmp==0)
break;
}
else
{
g=j;
while(buc[i].dis[k].people[g]==-1)
g++;
if(g!=j)
{
buc[i].dis[k].people[j]=buc[i].dis[k].people[g];
buc[i].dis[k].people[g]=-1;
}
tmp--;
if(tmp==0)
break;
}
}
}
for(j=0;j<buc[i].dis[0].pnum;j++)
{
min=10000;
max=0;
minzip=900000;
maxzip=0;
znum=1;
tmp=0;
while(buc[i].dis[tmp].people[j]==-1)
tmp++;
zip=np[buc[i].dis[tmp].people[j]].zip/10000;
for(k=0;k<buc[i].dnum;k++)
{
if(buc[i].dis[k].people[j]!=-1)
if(zip!=np[buc[i].dis[k].people[j]].zip/10000)
{
flag2=false;
break;
}
}
zip=np[buc[i].dis[tmp].people[j]].zip;
for(k=0;k<buc[i].dnum;k++)
{
if(buc[i].dis[k].people[j]!=-1)
{
if(np[buc[i].dis[k].people[j]].age<min)
min=np[buc[i].dis[k].people[j]].age;
if(np[buc[i].dis[k].people[j]].age>max)
max=np[buc[i].dis[k].people[j]].age;
if(flag2==true)
{
tmp=caculate_digit(zip,np[buc[i].dis[k].people[j]].zip);
if(znum<tmp)
znum=tmp;
}
else
{
if(np[buc[i].dis[k].people[j]].zip<minzip)
minzip=np[buc[i].dis[k].people[j]].zip;
if(np[buc[i].dis[k].people[j]].zip>maxzip)
maxzip=np[buc[i].dis[k].people[j]].zip;
}
}
np[buc[i].dis[k].people[g]].flag=true;
}
if(min>max-2)
max=max+3;
for(k=0;k<buc[i].dnum;k++) //打印
{
if(flag2==true)
{
if(buc[i].dis[k].people[j]==-1)
fprintf(fptr,"%d c \t \t %s\n",id,buc[i].dis[k].disease);
else
fprintf(fptr,"%d %s %d %d %s\n",id, np[buc[i].dis[k].people[j]].name,np[buc[i].dis[k].people[j]].age, np[buc[i].dis[k].people[j]].zip, buc[i].dis[k].disease);
tmp=10;
tmp2=znum;
while(tmp2!=1)
{
tmp*=10;
tmp2--;
}
fprintf(fptr2,"%d [%d-%d] %d",id, min, max, zip/tmp);
// printf("%d [%d-%d] %d",id, min, max, zip/tmp);
tmp2=znum;
while(tmp2!=0)
{
fprintf(fptr2,"*");
//printf("*");
tmp2--;
}
fprintf(fptr2,"%s\n",buc[i].dis[k].disease);
//printf("%s\n",buc[i].dis[k].disease);
}
else
{
if(buc[i].dis[k].people[j]==-1)
fprintf(fptr,"%d c \t \t %s\n",id,buc[i].dis[k].disease);
else
fprintf(fptr,"%d %s %d %d %s\n",id, np[buc[i].dis[k].people[j]].name,np[buc[i].dis[k].people[j]].age, np[buc[i].dis[k].people[j]].zip, buc[i].dis[k].disease);
fprintf(fptr2,"%d [%d-%d] %dk-%dk %s\n",id, min, max, minzip/1000, maxzip/1000, buc[i].dis[k].disease);
// printf("%d [%d-%d] %dk-%dk %s\n",id, min, max, minzip/1000, maxzip/1000, buc[i].dis[k].disease);
}
}
id++;
if(id==173)
{
int bb=100;
}
}
}
}
}
int hash(int key) //hash的映射函數
{
int result;
result=key/100;
return result;
}
int f(int num) //hash的key計算函數
{
int i,j,result=0,tmp=1;
char c[20];
for(i=0;i<num;i++)
{
tmp=1;
strcpy(c,SA[i].disease);
for(j=0;j<strlen(c);j+=2)
{
result=result+(c[j]+100)*(c[j+1]+100)+(SA[i].disease[j]+10000)/(SA[i].disease[j+1]+100);
//tmp*=(SA[i].disease[j]+SA[i].disease[j+1]+200);
}
}
for(i=0;i<num;i++)
{
for(j=num-1;j>=i;j--)
{
if((SA[i].disease[0]+SA[i].disease[3]+200)>(SA[j].disease[0]+SA[j].disease[3]+200))
{
strcpy(c,SA[i].disease);
strcpy(SA[i].disease,SA[j].disease);
strcpy(SA[j].disease,c);
}
}
}
strcpy(SA[num].disease,SA[0].disease);
for(i=1;i<num;i++)
strcat(SA[num].disease,SA[i].disease);
result+=num*num+tmp;
return result;
}
int searchhash(int key, char disease[])//查找hash表
{
int pos,i,result=-1;
bool flag=false;
pos=hash(key);
if (hashtable[pos].flag==false)
return result;
else
{
for(i=0;i<50;i++)
{
if(hashtable[pos].flag==true)
if(strcmp(hashtable[pos].disease,disease)==0)
{
result=hashtable[pos].bnumber;
flag=true;
break;
}
pos++;
}
}
if(flag==false)
result=-2;
return result;
}
void inserthash(int key, char disease[],int bnumber)//插入hash表
{
int pos=0;
pos=hash(key);
if (searchhash(key, disease)==-1)
{
strcpy(hashtable[pos].disease,disease);
hashtable[pos].bnumber=bnumber;
hashtable[pos].flag=true;
}
else if(searchhash(key, disease)==-2)
{
while(hashtable[pos].flag==true)
pos++;
strcpy(hashtable[pos].disease,disease);
hashtable[pos].bnumber=bnumber;
hashtable[pos].flag=true;
}
}
int hashdisease(char dis[]) //hash的映射函數
{
int i,j,result=0;
for(i=0;i<strlen(dis);i++)
result+=dis[i]+100;
result=result/10;
return result;
}
int searchdis(char dis[]) //查找hash表
{
int pos,i,result=-1;
bool flag=false;
pos=hashdisease(dis);
if (hashdis[pos].flag==false)
return result;
else
{
for(i=0;i<50;i++)
{
if(hashdis[pos].flag==true)
if(strcmp(hashdis[pos].disease,dis)==0)
{
result=hashdis[pos].dnumber;
flag=true;
break;
}
pos++;
}
}
if(flag==false)
result=-2;
return result;
}
void insertdis(char dis[], int dnumber) //插入hash表
{
int pos=0;
pos=hashdisease(dis);
if (searchdis(dis)==-1)
{
strcpy(hashdis[pos].disease,dis);
hashdis[pos].dnumber=dnumber;
hashdis[pos].flag=true;
}
else if(searchdis(dis)==-2)
{
while(hashdis[pos].flag!=false)
pos++;
strcpy(hashdis[pos].disease,dis);
hashdis[pos].dnumber=dnumber;
hashdis[pos].flag=true;
}
}
void create_tree(void)
{
tree a,b,c,d,e;
a=new t_node;
strcpy(a->disease,"感冒");
strcpy(dislist[0].disease,"感冒");
dislist[0].height=3;
dislist[0].T=a;
b=new t_node;
strcpy(b->disease,"支氣管炎");
strcpy(dislist[1].disease,"支氣管炎");
dislist[1].height=3;
dislist[1].T=b;
a->father=new t_node;
b->father=a->father;
c=a->father;
strcpy(c->disease,"呼吸感染");
a=new t_node;
strcpy(a->disease,"肺炎");
strcpy(dislist[2].disease,"肺炎");
dislist[2].height=3;
dislist[2].T=a;
b=new t_node;
strcpy(b->disease,"肺結核");
strcpy(dislist[3].disease,"肺結核");
dislist[3].height=3;
dislist[3].T=b;
a->father=new t_node;
b->father=a->father;
d=a->father;
strcpy(d->disease,"肺部疾病");
c->father=new t_node;
d->father=c->father;
c=c->father;
strcpy(c->disease,"呼吸系統疾病");
a=new t_node;
strcpy(a->disease,"胃炎");
strcpy(dislist[4].disease,"胃炎");
dislist[4].height=3;
dislist[4].T=a;
b=new t_node;
strcpy(b->disease,"胃癌");
strcpy(dislist[5].disease,"胃癌");
dislist[5].height=3;
dislist[5].T=b;
a->father=new t_node;
b->father=a->father;
d=a->father;
strcpy(d->disease,"胃部疾病");
a=new t_node;
strcpy(a->disease,"腸炎");
strcpy(dislist[6].disease,"腸炎");
dislist[6].height=3;
dislist[6].T=a;
b=new t_node;
strcpy(b->disease,"腸癌");
strcpy(dislist[7].disease,"腸癌");
dislist[7].height=3;
dislist[7].T=b;
a->father=new t_node;
b->father=a->father;
a=a->father;
strcpy(a->disease,"腸部疾病");
a->father=new t_node;
d->father=a->father;
a=a->father;
strcpy(a->disease,"消化系統疾病");
c->father=new t_node;
a->father=c->father;
root=a->father;
strcpy(root->disease,"呼吸和消化系統疾病");
a=new t_node;
strcpy(a->disease,"沙眼");
strcpy(dislist[8].disease,"沙眼");
dislist[8].height=3;
dislist[8].T=a;
b=new t_node;
strcpy(b->disease,"角膜炎");
strcpy(dislist[9].disease,"角膜炎");
dislist[9].height=3;
dislist[9].T=b;
a->father=new t_node;
b->father=a->father;
c=a->father;
strcpy(c->disease,"眼部疾病");
a=new t_node;
strcpy(a->disease,"鼻息肉");
strcpy(dislist[10].disease,"鼻息肉");
dislist[10].height=3;
dislist[10].T=a;
b=new t_node;
strcpy(b->disease,"中耳炎");
strcpy(dislist[11].disease,"中耳炎");
dislist[11].height=3;
dislist[11].T=b;
d=new t_node;
strcpy(d->disease,"喉炎");
strcpy(dislist[12].disease,"喉炎");
dislist[12].height=3;
dislist[12].T=d;
a->father=new t_node;
b->father=a->father;
d->father=a->father;
a=a->father;
strcpy(a->disease,"耳鼻喉疾病");
a->father=new t_node;
c->father=a->father;
c=a->father;
strcpy(c->disease,"五官疾病");
c->father=root;
a=new t_node;
strcpy(a->disease,"唇裂");
strcpy(dislist[13].disease,"唇裂");
dislist[13].height=3;
dislist[13].T=a;
b=new t_node;
strcpy(b->disease,"牙瘤");
strcpy(dislist[14].disease,"牙瘤");
dislist[14].height=3;
dislist[14].T=b;
d=new t_node;
a->father=d;
b->father=a->father;
strcpy(d->disease,"口腔疾病");
d->father=c;
a=new t_node;
strcpy(a->disease,"神經衰弱");
strcpy(dislist[15].disease,"神經衰弱");
dislist[15].height=3;
dislist[15].T=a;
b=new t_node;
strcpy(b->disease,"失眠");
strcpy(dislist[16].disease,"失眠");
dislist[16].height=3;
dislist[16].T=b;
a->father=new t_node;
b->father=a->father;
c=a->father;
strcpy(c->disease,"神經科");
c->father=new t_node;
c=c->father;
strcpy(c->disease,"神經疾病");
c->father=root;
}
int caculate(char a[], char b[])
{
int i,d1,d2,distance,num=0;
tree t1,t2;
bool flag=false;
for (i=0;i<disnum;i++)
{
if(strcmp(dislist[i].disease,a)==0)
{
d1=i;
if(flag==true)
break;
else
flag=true;
}
if(strcmp(dislist[i].disease,b)==0)
{
d2=i;
if(flag==true)
break;
else
flag=true;
}
}
if(dislist[d1].height<dislist[d2].height)
{
i=d1;
d1=d2;
d2=i;
}
i=dislist[d1].height;
t1=dislist[d1].T;
t2=dislist[d2].T;
while(i!=dislist[d2].height)
{
i--;
t1=t1->father;
}
while(t1!=t2)
{
t1=t1->father;
t2=t2->father;
}
while(t1!=root)
{
num++;
t1=t1->father;
}
distance=maxheight-num;
return distance;
}
int caculate_digit(int i, int j) //計算郵編
{
int result=4;
if((i/1000)==(j/1000))
{
result--;
if((i/100)==(j/100))
{
result--;
if((i/10)==(j/10))
result--;
}
}
return result;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -