3560: Ordered Fractions

描述

Consider the set of all reduced fractions between 0 and 1 inclusive with denominators less than or equal to N.

Here is the set when N = 5:

0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1

Write a program that, given an integer N between 1 and 160 inclusive, prints the fractions in order of increasing magnitude.

输入

One line with a single integer N.

输出

One fraction per line, sorted in order of magnitude.

样例输入

5

样例输出

0/1
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
1/1

题目来源

USACO

题目链接:http://tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=3560

题目大意:输出所有分母小于N,且分数值在0-1之间的所有分数

两重循环枚举以0-n为分子,1-n为分母的所有分数,然后去除重复的排序输出

我们可以考虑优化一下这个暴力,我们发现重复的 1/2 = 2/4 = 3/6,后面这些重复的都不是最简分数,所以我们只需要存在所有的最简分数,这样就不需要去重。

优化前:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
struct A {int z;//分子 int m;//分母 double a;//分数的值,因为数字很小,可以直接double比较是否相等
};
int gcd(int x, int y)
{if (x % y)return gcd(y , x % y);return y;
}
bool cmp(A x,A y) //按照 分数的值 进行排序从小到大输出
{return x.a<y.a;
}
A symp[12882],temp;
int main(void)
{int n,i,j,j_m,i_z,g,x;scanf("%d",&n);x=1;symp[0].a=0;for(j=1; j<=n; j++){for(i=1; i<=j; i++){//分子大于分母就大于1,可以不用遍历枚举g=gcd(j,i); j_m=j/g;i_z=i/g;symp[x].a=i_z*1.0/j_m;symp[x].z=i_z;symp[x].m=j_m;x++;}} sort(symp,symp+x,cmp);cout<<"0/1"<<endl;for(i=1; i<x; i++) {if(symp[i].a==symp[i-1].a)continue;//和前一项相等的,表示重复了,可以不用输出 elseprintf("%d/%d\n",symp[i].z,symp[i].m);}return 0;
}

  

优化后的代码:(我队友写的)

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
struct shu
{int fenzi;int fenmu;
}a[165*165];
int gcd(int x,int y)
{return y==0?x:gcd(y,x%y);
}
bool cmp(shu x,shu y)//分数通分后比较分子
{int z=gcd(x.fenmu,y.fenmu);z=x.fenmu*y.fenmu/z;return x.fenzi*(z/x.fenmu)<y.fenzi*(z/y.fenmu);
}
int main()
{int i,j,n,k;while(~scanf("%d",&n)){k=0;for(i=2;i<=n;i++){for(j=1;j<i;j++){if(gcd(i,j)!=1)continue;//判断是否是最简分数a[k].fenzi=j;a[k++].fenmu=i;}}sort(a,a+k,cmp);printf("0/1\n");for(i=0;i<k;i++){printf("%d/%d\n",a[i].fenzi,a[i].fenmu);}printf("1/1\n");// 1/1 的gcd等于1会出现多次,所以特判输出}
}

  

转载于:https://www.cnblogs.com/Anidlebrain/p/10081195.html

TZOJ--3560: Ordered Fractions (枚举)相关推荐

  1. P1458 [USACO2.1]顺序的分数 Ordered Fractions

    P1458 [USACO2.1]顺序的分数 Ordered Fractions - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h&g ...

  2. Problem 71:Ordered fractions

    Problem 71:Ordered fractions 题目链接:http://static.projecteuler.net/problem=71 题目大意:将所有形如$\frac{n}{d}(d ...

  3. USACO 2.1.3 Ordered Fractions

    USACO 2.1.3 Ordered Fractions                                           MPS 输入一个自然数N 请写一个程序来增序输出分母小于 ...

  4. P1458 顺序的分数 Ordered Fractions(有技巧的枚举)+C++类封装=精简代码

    题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...

  5. 1852. Ordered Fractions

    单点时限: 2.0 sec 内存限制: 256 MB Consider the set of all reduced fractions between 0 and 1 inclusive with ...

  6. usaco Ordered Fractions 顺序的分数(两种解法)

    这题很好玩,这里有两种解法. 第一种我自己写的,先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出.我写的时候还在想这章不是搜索吗这跟搜索关系不大吧,难道是怕我们思维定式化故意出的题不是搜 ...

  7. 顺序的分数 Ordered Fractions

    题目描述 输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数. 这有一个例子,当N=5时,所有解 ...

  8. USACO sec2.1 Ordered Fractions

    首先两重 for 循环对可能取的值约分,分子分母分别存放,根据比较分数大小的方法排序,然后按顺序输出(相同的只输出一个): /* PROG : frac1 LANG : C++ */ # includ ...

  9. USACO-Section2.1 Ordered Fractions(简单数据处理)

    2017-8-6 题目描述 按分数值递增的顺序输出所有解 解答 求出所有情况再排序即可 代码 /* ID: 18795871 PROG: frac1 LANG: C++ */ #include< ...

最新文章

  1. Android recipe 在代码中写布局
  2. 新的一年,开始新的学习旅途
  3. 语音控制 python_python有没有语音控制模块
  4. golang gorm 基本使用
  5. [bbk3100]第7集 - Chapter 04 - 介绍RAC中CVU工具的使用
  6. System.ArgumentException: 输入数组长度大于此表中的列数。
  7. express登录例子
  8. LeetCode刷题(21)
  9. 10以内逆向运算题_【七年级上】数学 有理数运算典型易错题分析(下)
  10. 为什么有人说“穷人玩股票一般都会赔”?
  11. android x5内核 下载地址,在Android项目中集成腾讯X5内核
  12. 机器学习之密度聚类(DBSCAN)
  13. netty权威指南 微云_Netty权威指南 第2版.pdf
  14. RetinaFace论文解读 --- RetinaFace: Single-stage Dense Face Localisation in the Wild
  15. 运用java画时钟_使用Swing绘制动态时钟
  16. API网关(什么是API网关、如何设计统一网关?),java面试手册升级版
  17. php能不能用super,supersu怎么用
  18. java我们一起打雪仗_我们一起打雪仗四年级作文
  19. 浅谈雷达在气象领域的基本应用
  20. 关于PyCharm比较高效率的使用技巧,学习Python的小伙伴别错过!

热门文章

  1. 2018-2019-1 20165212 实验五 通讯协议设计
  2. 控件自定义和QQ皮肤
  3. Java基础笔记12
  4. ios 中的小技巧 - 总有你想要的 一
  5. FlatBuffers初探
  6. 硬链接、软链接和inode
  7. ArrayList源码分析(基于JDK1.6)
  8. 批量修改MSSQL架构名称
  9. [导入]Don's Loose
  10. [C# 基础知识系列]专题五:当点击按钮时触发Click事件背后发生的事情