分数拆分

It is easy to see that for every fraction in the form(k > 0), we can always find two positive integers x and y,x ≥ y, such that:

Now our question is: can you write a program that counts how many such pairs of x and y there are for any given k?

Input

Input contains no more than 100 lines, each giving a value of k (0 < k ≤ 10000).

Output

For each k, output the number of corresponding (xy) pairs, followed by a sorted list of the values of x and y, as shown in the sample output.

Sample Input

2
12

Sample Output

2
1/2 = 1/6 + 1/3
1/2 = 1/4 + 1/4
8
1/12 = 1/156 + 1/13
1/12 = 1/84 + 1/14
1/12 = 1/60 + 1/15
1/12 = 1/48 + 1/16
1/12 = 1/36 + 1/18
1/12 = 1/30 + 1/20
1/12 = 1/28 + 1/21
1/12 = 1/24 + 1/24

法一:

#include<cstdio>
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
   int k,n;
   while( ~scanf("%d",&k))
   {
   int cnt=0;
    if(k==0) return 0;

   for(int i=k+1;i<=2*k;i++)
   {
       if(((i*k)%(i-k))==0) cnt++;
   }
    printf("%d\n",cnt);
   for(int i=k+1;i<=2*k;i++)
   {
        printf("1/%d = 1/%d + 1/%d\n",k,(i*k)/(i-k),i);
   }
}
    return 0;
}

法二:

#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<pair<int,int> > vec;
int main()
{
    int n,x,y;
    while(~scanf("%d",&n))
    {
        vec.clear();
        int cnt=0;
        for(int i=n+1;i<=2*n;i++)
        {
            if((i*n)%(i-n)==0)
            {
                x=i;
                y=i*n/(i-n);
                if(x<y) swap(x,y);
                vec.push_back(make_pair(x,y));
                cnt++;
            }
        }

    sort(vec.begin(),vec.end());
    printf("%d\n",cnt);
    for(int i=cnt-1;i>=0;i--)
    printf("1/%d = 1/%d + 1/%d\n",n,vec[i].first,vec[i].second);
}
     return 0;
}

AC题总结:

1.最后输出格式要与题意一致

2.时间超时的时候注意方法

3.输入scanf的返回值判断

时间: 2024-10-24 05:03:12

分数拆分的相关文章

rwkj 1394 分数拆分

#include<stdio.h> main(){ int k,x,y,n; scanf("%d",&n); while(n--) { scanf("%d",&k); for(x=k+1;x<=2*k;x++) for(y=2*k;;y++) { if(x*y>k*(x+y))break; if(x*y==k*(x+y)) printf("1/%d=1/%d+1/%d\n",k,y,x); } }} #in

NYOJ 66 分数拆分

分数拆分 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y. 输入 第一行输入一个整数n,代表有n组测试数据.接下来n行每行输入一个正整数k 输出 按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合 样例输入 2 2 12 样例输出 1/2=1/6+1/3 1/2=1/4+1/4 1/12=1/156+1/13 1/12=1/84+1/14 1/12=1/60+1/15 1/1

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

NYOJ 66 分数拆分【数学题】

题目链接 #include<stdio.h> int main() { int i,s,k,x; scanf("%d",&s); while(s--) { scanf("%d",&k); for(i=k+1;i<=2*k;i++) { x=(k*i)/(i-k); if(k == i*x/(x+i)) printf("1/%d=1/%d+1/%d\n",k,x,i); } } return 0; }

例题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> #

分数拆分(刘汝佳紫书P183)

枚举,由已知条件推得y大于k,小于等于2K AC代码: #include"iostream"#include"cstring"using namespace std;const int maxn=20002;int a[maxn];int b[maxn];int main(){ int i,y; int x,f,k; while(cin>>k&&k) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b

NYOJ-分数拆分

分数拆分 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y. 输入 第一行输入一个整数n,代表有n组测试数据. 接下来n行每行输入一个正整数k 输出 按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合 样例输入 2 2 12 样例输出 1/2=1/6+1/3 1/2=1/4+1/4 1/12=1/156+1/13 1/12=1/84+1/14 1/12=1/60+1/15 1/

1503162139-ny-分数拆分

分数拆分 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 现在输入一个正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y. 输入 第一行输入一个整数n,代表有n组测试数据. 接下来n行每行输入一个正整数k 输出 按顺序输出对应每行的k找到所有满足条件1/k=1/x+1/y的组合 样例输入 2 2 12 样例输出 1/2=1/6+1/3 1/2=1/4+1/4 1/12=1/156+1/13 1/12=1/84+1/14 1/12=1/60+1/15 1/

Loj10022 埃及分数(迭代加深搜索IDDFS)

#include<cstdio> #include<cmath> #include<cstring> using namespace std; typedef long long ll; ll depth,a,b,flag,ans[100005],nans[100005]; inline ll gcd(ll a,ll b){ return b?gcd(b,a%b):a; } inline void yuefen(ll &a,ll &b){ll eaa=g