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; }
文章分类:
算法例题
|