UVA10976

题目

分析:x>=y故1/y>=1/x,1/k-1/y<=1/y,所以可知道y<=2k,然后通过y去求解x即可

 1 #include "iostream"
 2 #include "cstdio"
 3 #include "cstring"
 4 #include "vector"
 5 using namespace std;
 6 int k;
 7 int main()
 8 {
 9     while(cin>>k)
10     {
11         vector<int> que1,que2;
12         for(int i=k+1;i<=(2*k);i++){
13             if(i*k%(i-k)==0){
14                 que1.push_back(i);
15                 que2.push_back(i*k/(i-k));
16             }
17         }
18         int t=que1.size();
19         printf("%d\n",t);
20         for(int i=0;i<que1.size();i++){
21             printf("1/%d = 1/%d + 1/%d\n",k,que2[i],que1[i]);
22         }
23     }
24 }

时间: 2024-11-06 09:49:49

UVA10976的相关文章

7_3 分数拆分(UVa10976)&lt;缩小枚举范围&gt;

每一个(k>0)这种形式的分数我们总是可以找到2个正整数x和y(x >= y),使得:现在我们的问题是:给你k,请你写一个程序找出所有的x和y.Input输入含有多组测试数据(不会超过100组).每组测试数据一列,有1个正整数k(0 < k <= 10000).Output对每一组测试数据输出一列,输出共有多少组(x,y),然后输出这些解答.输出格式请参考Sample Output. Sample Input212 Sample Output 2 1/2 = 1/6 + 1/3 1

UVa10976 Fractions Again?! (推公式)

链接:http://acm.hust.edu.cn/vjudge/problem/37234分析:x>=y和1/k=1/x+1/y=>y<=2k再加上x,y,k都是正整数可以推出y>k. 1 #include <iostream> 2 using namespace std; 3 4 int main() { 5 int k; 6 while (scanf("%d", &k) == 1) { 7 int num = 0, a[1000], b

UVa10976 - Fractions Again?!

题意 输入正整数k,找到所有的正整数x >= y,使1/k = 1/x +1/y. 思路 先找到x或y的范围:因为x >= y,所以 1/k <= 2/y 得出 y<=2*k 再找到可以计算出x的方法即可 总结 刚开始用了二重循环找x,结果超时.今天早晨起来想了个更常规且更简单的方法 1 #include <iostream> 2 #include <cstdio> 3 const int maxn = 1e6+5; 4 typedef long long

例题7-3 分数拆分 UVa10976

1.题目描述:点击打开链接 2.解题思路:根据题目描述,可以解出来y的范围是1≤y≤2k.进而可以求出x=ky/(y-n).注意x要大于0且是整数. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #