题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805268334886912
坑点:
- 两个端点值不取, 只取它们之间的。即开区间而不是闭区间
- 给的两个值大小不知,我坑在当n2>n1时, 即左大右小时,只改变了分子,没变分母。导致后面的判断出错,少取了值。
#include <iostream>
using namespace std;
int gcd(int a, int b)
{
if(b == 0)
return a;
return gcd(b, a % b);
}
void solve()
{
int n1, m1, n2, m2, k;
char p;
cin>>n1>>p>>m1>>n2>>p>>m2>>k;
n1 = k * n1 / m1;
n2 = k * n2 / m2;
if(n2 < n1)
{
n1 = n2 + n1;
n2 = n1 - n2;
n1 = n1 - n2;
m2 = m1;
}
n1++;
if((k * n2) % m2)
n2++;
bool fa = false;
for(int i = n1; i < n2; i++)
{
int x = gcd(k, i);
if(x == 1)
{
if(!fa){
cout<<i<<"/"<<k;
fa = true;
continue;
}
cout<<" "<<i<<"/"<<k;
}
}
cout<<endl;
}
int main()
{
solve();
return 0;
}
解决方法不难想,主要是容易掉坑。题目应属于20分简单类
2018年9月17日 9:47:34