洛谷 P1458 顺序的分数 Ordered Fractions
Posted 一蓑烟雨任生平
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷 P1458 顺序的分数 Ordered Fractions相关的知识,希望对你有一定的参考价值。
题目描述
输入一个自然数N,对于一个最简分数a/b(分子和分母互质的分数),满足1<=b<=N,0<=a/b<=1,请找出所有满足条件的分数。
这有一个例子,当N=5时,所有解为:
0/1 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1/1
给定一个自然数N,1<=n<=160,请编程按分数值递增的顺序输出所有解。
注:①0和任意自然数的最大公约数就是那个自然数②互质指最大公约数等于1的两个自然数。
输入输出格式
输入格式:
单独的一行一个自然数N(1..160)
输出格式:
每个分数单独占一行,按照大小次序排列
输入输出样例
说明
USACO 2.1
翻译来自NOCOW
思路:枚举
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,now; struct nond{ int up,down; double value; }v[100000]; int cmp(nond a,nond b){ return a.value<b.value; } int gcd(int x,int y){ return x==0?y:gcd(y%x,x); } int main(){ cin>>n; cout<<"0/1\n"; for(int i=1;i<=n;i++) for(int j=1;j<=i-1;j++) if(gcd(i,j)==1){ v[now].up=j;v[now].down=i; v[now].value=j*1.0/i;now++; } sort(v,v+now,cmp); for(int i=0;i<=now-1;i++) cout<<v[i].up<<"/"<<v[i].down<<"\n"; cout<<"1/1"; }
以上是关于洛谷 P1458 顺序的分数 Ordered Fractions的主要内容,如果未能解决你的问题,请参考以下文章
洛谷 P1458 [USACO2.1]顺序的分数 Ordered Fractions
洛谷OJ 1074 靶型sudoku dfs(搜索顺序优化)
在 calc() 中使用分数 (fr) 会给出“无效的属性值”