栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1202 Family

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1202 Family

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;#define MAX 450struct node{    int p1,p2;    bool s1;}ss[305];char map[305][305][450];int Compare(const char *a, const char *b);void IntAddition(char *augend, char *addend, char *sum);void FloatAddition(char *augend, char *addend, char *sum);void FloatDivision(char *dividend, char *divisor, char *quotient, int precision);int subcompare(char *str1,char *str2){    int len1=strlen(str1);    int len2=strlen(str2);    int tmp1=0;    int tmp2=0;    int pos1=0;    int pos2=0;    int i,j;    for(i=0;i<len1;i++)    {        if(str1[i]=='.')break;        tmp1=tmp1*10+str1[i]-'0';    }    pos1=i;    for(i=0;i<len2;i++)    {        if(str2[i]=='.')break;        tmp2=tmp2*10+str2[i]-'0';    }    pos2=i;    if(tmp1>tmp2)return 1;    else if(tmp2>tmp1)return -1;    else    {        for(i=pos1+1,j=pos2+1;i<len1,j<len2;i++,j++)        { if(str1[i]<str2[j])return -1; else if(str1[i]>str2[j])return 1;        }        if(i==len1)return -1;        else  return 1;    }}void dfs(int n,int p,int q){    int i;    if(p==q)        map[p][q][0]='1',map[p][q][1]='0',map[p][q][2]='0',map[p][q][3]='.',map[p][q][4]='0',map[p][q][5]='';    else if(ss[p].s1==false && ss[q].s1==false)        map[p][q][0]='0',map[p][q][1]='.',map[p][q][2]='0',map[p][q][3]='';    if(map[p][q][0]!='')        return;    char two[5];    memset(two,'',sizeof(two));    two[0]='2';two[1]='';    char ans1[450]={0};    char ans2[450]={0};    if(ss[p].s1)    {        int p_1=ss[p].p1;        int p_2=ss[p].p2;        if(map[p_1][q][0]=='') dfs(n,p_1,q);        if(map[p_2][q][0]=='') dfs(n,p_2,q);        FloatAddition(map[p_1][q],map[p_2][q],ans1);        FloatDivision(ans1,two,ans2,300);        int n_1=strlen(ans2);        //for(i=0;i<n_1;i++)        strcpy(map[p][q],ans2);        //return;    }    if(ss[q].s1)    {        int q_1=ss[q].p1;        int q_2=ss[q].p2;        if(map[p][q_1][0]=='') dfs(n,p,q_1);        if(map[p][q_2][0]=='') dfs(n,p,q_2);        FloatAddition(map[p][q_1],map[p][q_2],ans1);        FloatDivision(ans1,two,ans2,300);        int n_1=strlen(ans2);        if(subcompare(ans2,map[p][q])>0)        { strcpy(map[p][q],ans2);        }        //return;    }    return;}int main(){    int n,k;    int i,j,a,b,c,p,q;    char sss[450];    scanf("%d %d",&n,&k);        for(i=0;i<=n;i++) ss[i].s1=false;        for(i=1;i<=k;i++)        { scanf("%d %d %d",&a,&b,&c); ss[a].p1=b; ss[a].p2=c; ss[a].s1=true;        }        for(i=0;i<305;i++) for(j=0;j<305;j++)     map[i][j][0]='';        scanf("%d",&k);        while(k--)        { scanf("%d %d",&p,&q); dfs(n,p,q); int n1=strlen(map[p][q]); strcpy(sss,map[p][q]); bool f1=0; for(i=0;i<n1;i++) {      if(map[p][q][i]=='.')      {f1=1;break;     }       } if(f1) {     for(i=n1-1;i>=0;i--)     {          if(map[p][q][i]!='0')          {    if(map[p][q][i]=='.')    map[p][q][i]='';    else    map[p][q][i+1]='';    break;          }   } } if(strlen(map[p][q])==0)printf("0%%n",map[p][q]); else     printf("%s%%n",map[p][q]); strcpy(map[p][q],sss);        }    return 0;}void FloatDivision(char *dividend, char *divisor, char *quotient, int precision){    char ans[MAX];    int n1=strlen(dividend);    int i,j;    bool f1=false;    for(i=0;i<n1;i++)    {        if(dividend[i]=='.')        { ans[i]='.'; continue;        }        j=dividend[i]-'0';        if(f1) j+=10;        ans[i]=j/2+'0';        if((dividend[i]-'0')%2==1) f1=true;        else        f1=false;    }    if(f1)        ans[i++]='5';    ans[i]='';    n1=strlen(ans);    j=0;    for(i=0;i<n1;i++)    {        if(ans[i]!='0')        { if(ans[i]=='.')     i--; break;        }    }    for(;i<=n1;i++)    {        quotient[j++]=ans[i];    }}void FloatAddition(char *augend, char *addend, char *sum){    int len1=strlen(augend);    int len2=strlen(addend);    int i,j,cf;    int tpos1,tpos2;    int respos;    int pos1,pos2;    for(i=0;i<450;i++)    {        sum[i]='0';    }    for(i=0;i<len1;i++)    {        if(augend[i]=='.')break;    }    if(i==len1-1)    {        augend[i+1]='0';        len1++;    }    if(i==len1)    {        augend[i]='.';        i++;        len1++;        len1++;        augend[i+1]='0';    }    pos1=i;    for(i=0;i<len2;i++)    {        if(addend[i]=='.')break;    }    if(i==len2-1)    {        addend[i+1]='0';        len2++;    }    if(i==len2)    {        addend[i]='.';        i++;        addend[i+1]='0';        len2++;        len2++;    }    pos2=i;    respos=449;    if(len1-pos1<len2-pos2)    {        tpos2=len2-1;        tpos1=len1-1;        while(len1-pos1<=tpos2-pos2)        { sum[respos--]=addend[tpos2]; tpos2--;        }        if(addend[tpos2]=='.')tpos2--;        cf=0;        while(tpos1>pos1)        { sum[respos--]=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')%10+'0'; cf=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')/10; tpos2--; tpos1--;        }        tpos1--;        tpos2--;        sum[respos--]='.';        while(tpos1>=0 && tpos2>=0)        { sum[respos--]=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')%10+'0'; cf=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')/10; tpos2--; tpos1--;        }        if(tpos2>=0)        { while(tpos2>=0) {     sum[respos--]=(addend[tpos2]+cf-'0')%10+'0';     cf=(addend[tpos2]+cf-'0')/10;     tpos2--; }        }        else if(tpos1>=0)        { while(tpos1>=0) {     sum[respos--]=(augend[tpos1]+cf-'0')%10+'0';     cf=(augend[tpos1]+cf-'0')/10;     tpos1--; }         }        if(cf!=0)        { sum[respos--]=cf+'0';        }    }    else    {        tpos2=len2-1;        tpos1=len1-1;        while(len2-pos2<=tpos1-pos1)        { sum[respos--]=augend[tpos1]; tpos1--;        }        if(augend[tpos1]=='.')tpos1--;        cf=0;        while(tpos1>pos1)        { sum[respos--]=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')%10+'0'; cf=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')/10; tpos2--; tpos1--;        }        tpos1--;        tpos2--;        sum[respos--]='.';        while(tpos1>=0 && tpos2>=0)        { sum[respos--]=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')%10+'0'; cf=(addend[tpos2]+augend[tpos1]+cf-'0'-'0')/10; tpos2--; tpos1--;        }        if(tpos2>=0)        { while(tpos2>=0) {     sum[respos--]=(addend[tpos2]+cf-'0')%10+'0';     cf=(addend[tpos2]+cf-'0')/10;     tpos2--; }        }        else if(tpos1>=0)        { while(tpos1>=0) {     sum[respos--]=(augend[tpos1]+cf-'0')%10+'0';     cf=(augend[tpos1]+cf-'0')/10;     tpos1--; }         }        if(cf!=0)        { sum[respos--]=cf+'0';        }    }    for(i=0;;i++)    {        if(sum[i]!='0')break;    }    if(sum[i]=='.')i--;    for(j=i;j<450;j++)    {        sum[j-i]=sum[j];    }    sum[j-i]='';    if(sum[strlen(sum)-1]=='.')    {        int xx=strlen(sum);        sum[xx]='0';        sum[xx+1]='';    }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号