题目描述
听说在五维空间里,所有的事都有美好的结局呢。还在上小学的小 A 听说了这句话,虽然他不知道什么是五维空间,但这并不影响他寻找所谓“五维空间”的热情。那时的小A生活在四面环山的小城M城,他便猜想五维空间就在自己所生活的M城周围的山上,于是他便叫来了他的好友小C一起去山洞探险。
在山洞里,他们发现了一块石头,第一行刻着一个由约等号连接的公式,左边是一个最简真分数(分子和分母的最大公约数是11),右边是一个问号,第二行有两个数,第一个数字为11,是一个数字区间。石头旁有一个输入密码的设备,这让小A非常兴奋。
这时一旁的小C说:“我觉得密码就是找一个最小的分子分母都属于第二行的数字区间的最简真分数,使得它与第一行左边给定的分数最接近,不能和原来的分数一样。”紧接着小A问道:“为什么是最小的分子分母都属于”,“直觉”,小A话还没有说完,就被小C打断。小A回忆起曾和小C一起看解谜类故事书的时候,小C从不需要解密卡就能猜到谜底,于是小A便相信了小C。根据故事书的经验,小A觉得只要解开谜题他便能够到达“五维空间”。
可是这个问题对于当时还在读小学的小A和小C过于困难,于是小A希望你能够帮助他们找到所要求的最简真分数。
输入描述
第一行包含两个用一个空格隔开的正整数 𝑁,𝐷(1≤𝑁<𝐷<100000)N,D(1≤N<D<100000) ,分别是给定分数的分子和分母。第二行包含一个正整数𝑅R,所要求的分数分子分母所属的区间为[1,𝑅][1,R]。
输出描述
两个用一个空格隔开的正整数,分别是你求出的最接近的分数的分子和分母。
输入样例1
2 | 3 |
300 |
输出样例1
| 299 |
输入样例2
| 3 |
32767 |
输出样例2
21845 | 32767 |
样例解释
数据范围
对于 30%的数据,𝑅≤300
对于 60%的数据,𝑅≤3000
对于 100%的数据,1≤𝑅≤100000,1≤𝑁<𝐷<100000
#include<bits/stdc++.h>
using namespace std;
int x,y;
int n,d,m;
int ans=1.0*100000000000;
int X,Y;
int inf;
int gcd(int x,int y){
if(y==0) return x;
gcd(y,x%y);
}
bool check(int x,int y){
if(x==n&&y==d) return 0;
if(gcd(x,y)!=1) return 0;
return 1;
}
int main(){
cin>>n>>d>>m;
double p=1.0*n/d;
double ans=inf;
for(int x=1;x<m;x++){
for(int y=x+1;y<=m;y++){
if(check(x,y)){
double now=1.0*x/y;
if(abs(ans-p)>abs(now-p)){
ans=now;
X=x;
Y=y;
}
}
}
}
cout<<X<<" "<<Y<<endl;
return 0;
}
当然,这个紫腚~~~~~~过不了,懒得写ac代码,那就下次再写吧