链接:https://ac.nowcoder.com/acm/problem/16501
来源:牛客网
输入共一行,包含三个整数 A,B,L ,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。
输出共一行,包含两个整数 A ’, B ’,中间用一个空格隔开,表示化简后的比例。
1498 902 10
5 3
对于 100% 的数据, 1 ≤ A ≤ 1,000,000,1 ≤ B ≤ 1,000,000,1 ≤ L ≤ 100,A/B ≤ L
穷举。双重循环分别在[1,L]范围内的i和j,三个约束条件
(1)A‘用循环变量 i 表示,B‘用循环变量 j 表示,互质(最大公约数为1)
(2)A‘/B‘≥A/B (i/j>=s)
(3)A‘/B‘-A/B 的值尽可能小(打擂台)
然后这道题目细节问题比较多,注意比值结果应该用实数保存和比较。建议用double类型
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <string> 5 #include <cstring> 6 #include <cstdlib> 7 #include <cmath> 8 #include <stack> 9 #include <queue> 10 #include <set> 11 #include <map> 12 #include <vector> 13 #include <ctime> 14 #include <cctype> 15 #include <bitset> 16 #include <utility> 17 #include <sstream> 18 #include <complex> 19 #include <iomanip> 20 #define inf 0x3f3f3f3f 21 typedef long long ll; 22 using namespace std; 23 int A,B,L,a,b,jgA,jgB,bz,wc; 24 int main() 25 { 26 cin>>A>>B>>L; 27 double bz=A*0.1/B,wc=100000; 28 for(int i=1; i<=L; i++) 29 { 30 for(int j=1; j<=L; j++) 31 { 32 a=i; 33 b=j; 34 b=__gcd(a,b); 35 if(b==1) 36 { 37 if(i*0.1/j>=bz&&i*0.1/j<wc+bz) 38 { 39 wc=i*0.1/j-bz; 40 jgA=i; 41 jgB=j; 42 } 43 } 44 } 45 } 46 cout<<jgA<<‘ ‘<<jgB<<endl; 47 return 0; 48 }
原文:https://www.cnblogs.com/mxnzqh/p/11834681.html