列表

详情


NC22915. 顺序的分数

描述

输入一个自然数N
请写一个程序来增序输出分母小于N的既约真分数

输入描述

单独的一行 一个自然数N

输出描述

每个分数单独占一行

示例1

输入:

5

输出:

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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 21ms, 内存消耗: 512K, 提交时间: 2023-07-11 20:34:11

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int cnt;
struct num {
    int a, b;
    bool operator<(const num &t) const{
        return a * t.b < b*t.a;
    }
}p[40010];
int main()
{
    int n;
    cin >> n;
    p[cnt++] = { 0,1 };
    p[cnt++]={1,1};
    for (int i = 2;i <= n;i++){
        for (int j = 1;j < i;j++){
            if (__gcd(i, j) == 1) p[cnt++] = { j,i };
        }
    }
    sort(p, p + cnt);
    for (int i = 0;i < cnt;i++) cout << p[i].a << "/" << p[i].b << endl;
}

C++11(clang++ 3.9) 解法, 执行用时: 21ms, 内存消耗: 632K, 提交时间: 2020-10-11 17:58:29

#include<bits/stdc++.h>
using namespace std;
struct node{
	int a,b;
	double value;
}a[30005];
int n,size;
bool cmp(node a,node b){
	return a.value<b.value;
}
int main(){
	cin>>n;
	cout<<"0/1"<<endl;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i>j||__gcd(i,j)!=1)continue;
			a[++size].a=i,a[size].b=j,a[size].value=(double)i/j;
		}
	}
	sort(a+1,a+size+1,cmp);
	for(int i=1;i<=size;i++)
		cout<<a[i].a<<"/"<<a[i].b<<endl;
}

Pascal(fpc 3.0.2) 解法, 执行用时: 7ms, 内存消耗: 324K, 提交时间: 2019-08-25 14:16:35

var
 i,p,q,n:longint;
 a:array[1..1000]of longint;
begin
 readln(n);
 while a[1]<>2 do
  begin
   p:=a[1];
   q:=1;
   for i:=2 to n do
    if p*i>q*a[i] then begin
                        p:=a[i];
                        q:=i;
                       end;
   writeln(p,'/',q);
   for i:=1 to n do
    if p*i=q*a[i] then a[i]:=a[i]+1;
  end;
end.

C 解法, 执行用时: 4ms, 内存消耗: 392K, 提交时间: 2022-03-27 19:48:14

#include <stdio.h>
#include <stdlib.h>

int  N;
void shunxu(int a, int b, int  m, int n)
{
	if (b > N || n > N)
		return ;

	shunxu(a, b, a + m, b + n);
	if (b + n <= N)
		printf("%d/%d\n", a + m, b + n);
	shunxu(a + m, b + n, m, n);
}
int main(void)
{
	scanf("%d", &N);
	printf("0/1\n");
	shunxu(0, 1, 1, 1);
	printf("1/1\n");

	return 0;
}

上一题