Day25 洛谷P1482 Cantor表(升级版)

    技术2024-07-28  66

    题目描述

    现代数学的著名证明之一是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 <stdio.h> #include<string.h> int i,j; int main(){ char a[15],b[15]; char au[15],ad[15],bu[15],bd[15]; int as,ax,bs,bx; int son,mom; scanf("%s",a); scanf("%s",b); for (i=0;a[i]!='/';i++){ au[i]=a[i]; } as=atoi(au); i++; for (j=0;i<strlen(a);i++,j++){ ad[j]=a[i]; } ax=atoi(ad); for (i=0;b[i]!='/';i++){ bu[i]=b[i]; } bs=atoi(bu); i++; for (j=0;i<strlen(b);i++,j++){ bd[j]=b[i]; } bx=atoi(bd); son=as*bs,mom=ax*bx; for (i=(son<mom?son:mom);i>1;i--){ if (son%i==0&&mom%i==0){ break; } } son/=i,mom/=i; printf("%d %d",mom,son); return 0; }
    Processed: 0.009, SQL: 9