PAT乙級 1062 最簡分數 (20 分)
阿新 • • 發佈:2018-11-28
一個分數一般寫成兩個整數相除的形式:N/M,其中 M 不為0。最簡分數是指分子和分母沒有公約數的分數表示形式。
現給定兩個不相等的正分數 N1/M1和 N2/M2,要求你按從小到大的順序列出它們之間分母為 K 的最簡分數。
輸入格式:
輸入在一行中按 N/M 的格式給出兩個正分數,隨後是一個正整數分母 K,其間以空格分隔。題目保證給出的所有整數都不超過 1000。
輸出格式:
在一行中按 N/M 的格式列出兩個給定分數之間分母為 K 的所有最簡分數,按從小到大的順序,其間以 1 個空格分隔。行首尾不得有多餘空格。題目保證至少有 1 個輸出。
輸入樣例:
7/18 13/20 12
輸出樣例:
5/12 7/12
程式碼:
#include<stdio.h> int GCD(int a,int b){ int c=a%b; while(c){ a=b; b=c; c=a%b; } return b; } int main(){ int N[2],M[2],K,sign=1; scanf("%d/%d %d/%d %d",&N[0],&M[0],&N[1],&M[1],&K); if(N[0]*M[1]>N[1]*M[0]){ int temp_N=N[0],temp_M=M[0]; N[0]=N[1],M[0]=M[1]; N[1]=temp_N,M[1]=temp_M; } for(int i=0;i<K;++i){ if(GCD(K,i+1)==1){ if(((i+1)*M[0]>N[0]*K)&&((i+1)*M[1]<N[1]*K)){ if(sign){ sign=0; printf("%d/%d",i+1,K); } else{ printf(" %d/%d",i+1,K); } } } } return 0; }