UVA10976 分数拆分 Fractions Again?!

简介: UVA10976 分数拆分 Fractions Again?!

题目描述


2021061418545451.png

输入

2
12


输出


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


思路: 由于没有给x,y的数的范围,也不知道啥时候枚举结束.我们可以根据已知条件做出一些推断:


1/k = 1 / x + 1 / y <= 2/y ===>> y<=2*k

另外x = k*y / (y-k) => y>k

所以 y∈[k+1,2*k]

这样我们粗略的得到了y的范围,知道了y的范围,我们可以根据上面那个式子推出x ,在判断x是否存在时,我们可以通过 求余进行判断推出的x是否合理.


参考代码:

#include<iostream>
using namespace std;
int k,y,a[5000],b[5000],cnt;//定义两个数组存储所有的可能性. 
int main()
{
  //y<=2*k   x = k*y / (y-k)==> y >k
  while(cin>>k){
    //memset(a,0,sizeof(a));
    cnt = 0;//用于计数 
    for(int y = k+1; y <= 2*k;y++){//枚举y,同时枚举x   
      if(!(k*y % (y-k)) && k*y / (y-k) >=y){//当 k*y 对 (y-k)求余为0,并且x >=y 则说明满足题意. 
        a[cnt] = k*y / (y-k);
        b[cnt] = y;
        cnt++;
      }
    }
    cout<<cnt<<endl;
    for(int i = 0;i < cnt;i++){
      printf("1/%d = 1/%d + 1/%d\n",k,a[i],b[i]);
    } 
  }
  return 0;
}

另外看了看刘汝佳大佬的代码,也很不错,附上

参考代码2

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int main()
{
  int k;
  while(scanf("%d",&k)==1&&k){
    vector<int> X,Y;
    for(int y = k+1;y<=2*k;y++){
      if(k*y %(y-k)==0){
        X.push_back(k*y /(y-k));
        Y.push_back(y); 
      }
    }
    printf("%d\n",X.size());
    for(int i = 0;i < X.size();i++){
      printf("1/%d = 1/%d + 1/%d\n",k,X[i],Y[i]);
    }
  }
  return 0;
}
相关文章
|
7月前
PTA-求分数序列的前n项和分数 20
求分数序列的前n项和分数 20
88 0
|
7月前
PTA-求简单交错序列前N项和
求简单交错序列前N项和
65 0
|
7月前
|
Python
PTA-第4章-8 求分数序列前N项和
编写程序计算序列 2/1+3/2+5/3+8/5+... 的前N项和,其中每项分子是前一项分子与分母之和,分母是前一项分子。输入一个正整数N,输出部分和,精确到小数点后两位。给定N=20,输出为32.66。以下是代码实现: ```python n = int(input()) sum = 0 a = 2 b = 1 for i in range(1, n + 1): sum += a / b c = a a = a + b b = c print(f&quot;{sum:.2f}&quot;) ```
141 3
|
7月前
PTA-求交错序列前N项和
求交错序列前N项和
49 2
|
7月前
|
人工智能
GEE数据的白天day/夜晚night LST数据按照QC掩膜后的结果差异明显
GEE数据的白天day/夜晚night LST数据按照QC掩膜后的结果差异明显
79 0
PTA 1056 组合数的和 (15 分)
给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。
127 0
PTA 1083 是否存在相等的差 (20 分)
给定 N 张卡片,正面分别写上 1、2、……、N,然后全部翻面,洗牌,在背面分别写上 1、2、……、N。
75 0
PTA -7-51 两个有序链表序列的合并(C++)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。 输出格式: 在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。 输入样例: 1 3 5 -1 2 4 6 8 10 -1 输出样例: 1 2 3 4 5 6 8 10
591 0
[UVA1364 | POJ | NC]Knights of the Round Table | Tarjan 求点双 | 二分图 | 综合图论
我们可以很轻松地发现,被提出的都是在点双连通分量之外的,比如该图中的1 和 5 ,那么怎么判断哪些点不在环中呢? 此时我们还可以逆向思考,不 在 环 中 的 = = 总 的 − 在 环 中 的,所以说现在问题就转换成了满足条件的环内的点的个数
134 0
[UVA1364 | POJ | NC]Knights of the Round Table | Tarjan 求点双 | 二分图 | 综合图论