3 条题解

  • 0
    @ 2023-12-12 19:06:18

    #include <iostream>
    using namespace std;
    int a,b,n,a1,b1;
    int gcd(int a,int b)
    {
    int r=a%b;
    while(r)
    {
    a=b;b=r;r=a%b;
    }
    return b;
    }
    int lcm(int a,int b)
    {
    return a/gcd(a,b)*b;
    }
    int main()
    {
    cin>>n>>b>>a;
    int fm=a,fz=b;
    for(int i=2;i<=n;i++)
    {
    cin>>b1>>a1;
    int l=lcm(fm,a1);
    fz=fz*l/fm+b1*l/a1;
    fm=l;
    }
    int n=gcd(fz,fm);
    cout<<fz/n<<" "<<fm/n;
    return 0;
    }

  • 0

    #include <iostream>
    using namespace std;
    int MaxYue(int a,int b);
    int MinBei(int a,int b);
    int MaxYue(int a,int b)
    {
    int tmp;
    if(a<b) //如果a小于b,则交换值
    {
    tmp=a;
    a=b;
    b=tmp;
    }
    return b==0?a:MaxYue(b,a%b); //运用辗转相除法求出最大公约数
    }
    int MinBei(int a,int b)
    {
    return a*b/MaxYue(a,b); //最小公倍数等于两数乘积除以最大公约数
    }
    int main()
    {
    int i,n,a[1000],b[1000],asum=0,bsum;
    cin>>n;
    for(i=0;i<n;i++)
    cin>>a[i]>>b[i];
    if(n==1) //如果只有一项,直接输出
    {
    i=MaxYue(a[0],b[0]);
    a[0]/=i;
    b[0]/=i;
    cout<<a[0]<<" "<<b[0];
    return 0;
    }
    bsum=MinBei(b[0],b[1]); //首先记录前两项分母的最小公倍数
    for(i=2;i<n;i++)
    bsum=MinBei(bsum,b[i]); //循环记录与后一个分母的最小公倍数
    for(i=0;i<n;i++)
    asum+=a[i]*bsum/b[i]; //分子乘以分母扩大的倍数然后相加
    i=MaxYue(asum,bsum); //分子和分母进行约分,除以最大公倍数
    asum/=i;
    bsum/=i;

    cout<<asum<<" "<<bsum;
    return 0;
    }

  • -1

    #include<iostream>
    using namespace std;

    struct Node
    {
    int fen_zi;
    int fen_mu;
    Node *next;
    };

    class LinkList
    {
    private:
    int n;
    Node *head;
    Node *tail;
    public:
    LinkList(int set_n)
    {
    n=set_n;
    head=NULL;
    tail=NULL;
    }

    void set_list(LinkList &L)
    {
    int x,y;
    for(int i=0;i<L.n;i++)
    {
    cin>>x>>y;
    L.insert(x,y);
    }
    }

    void insert(int x,int y)
    {
    Node *newp=new Node;
    newp->fen_zi=x;
    newp->fen_mu=y;
    if(head==NULL)
    {
    head=newp;
    tail=newp;
    }
    else
    {
    tail->next=newp;
    tail=newp;
    }
    if(tail!=NULL)
    tail->next=NULL;
    }

    int get_fen_mu()//得到不化简的分子
    {
    Node *p=head;
    int sum=1;
    while(p!=NULL)
    {
    sum=sum*p->fen_mu;
    p=p->next;
    }
    return sum;
    }

    int get_fen_zi(LinkList &L)//得到不化简的分母
    {
    Node *p=L.head;
    int sum=0;
    while(p!=NULL)
    {
    sum=sum+p->fen_zi*L.get_fen_mu()/p->fen_mu;
    p=p->next;
    }
    return sum;
    }

    int yue_shu(int x,int y)//求最大公约数
    {
    int tmp;
    if(x<y)
    {
    tmp=x;
    x=y;
    y=tmp;
    }
    return y==0?x:yue_shu(y,x%y);
    }

    };

    int main()
    {
    int n;
    cin>>n;
    LinkList start(0);
    LinkList List(n);
    start.set_list(List);
    int x,y;
    x=start.get_fen_zi(List)/List.yue_shu(start.get_fen_zi(List),List.get_fen_mu());
    y=List.get_fen_mu()/List.yue_shu(start.get_fen_zi(List),List.get_fen_mu());
    cout<<x<<" "<<y<<endl;

    system("pause");
    return 0;
    }

  • 1

A6-3 最大公约数专题:多个分数的加法

信息

ID
1028
难度
2
分类
(无)
标签
递交数
95
已通过
52
通过率
55%
上传者