Datahub
数据改变生活

P1482 Cantor表(升级版)

发表时间:2022-10-28 23:13

P1482 Cantor表(升级版)

题目描述

现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:

1/1 1/2 1/3 1/4 1/5 …

2/1 2/2 2/3 2/4 …

3/1 3/2 3/3 …

4/1 4/2 …

5/1 …

… 这次与NOIp1999第一题不同的是:这次需输入两个分数(不一定是最简分数),算出这两个分数的积(注意该约分的要约分)后输出积在原表的第几列第几行(若积是整数或1/积,则以“积/1”或“1/积”结算)。

输入格式

共两行。每行输入一个分数(不一定是最简分数)。

输出格式

两个整数,表示输入的两个分数的积在表中的第几列第几行,注意该约分的要约分。

输入输出样例

输入 #1复制

4/5

5/4

输出 #1复制

1 1

说明/提示

所有数据:两个分数的分母和分子均小于10000

#include<bits/stdc++.h>

using namespace std;

int read(){

    int x=0,f=0;char c=getchar();

    while(!isdigit(c)){if(c=='-')f=1;c=getchar();}

    while(isdigit(c)){

        x=x*10+c-'0';

        c=getchar();

    }

    return f?x:x;

}

int a,b,c,d;

int a1,a2,g;

int gcd(int a,int b){return b==0?a:gcd(b,a%b);}

void init(){

    a=read();b=read();c=read();d=read();

    a1=a*c;a2=b*d;//puts(" ");

    if(a1>a2) g=gcd(a1,a2);

    else g=gcd(a2,a1);

    a1/=g;a2/=g;

}

void get_ans(){

    printf("%d %d\n",a2,a1);

}

int main(){

    init();get_ans();

    return 0;

}


文章分类: 算法例题
分享到:
QQ:258506508                                     联系电话:020-000000    000-000000                                   联系邮箱:xxx@.co.m                                     联系地址:XXX省XXX市XXX县XXX路