东华OJ-基础题-120-顺序的分数(C++)

  • 问题描述
    输入一个自然数N,请写一个程序来增序输出分母小于等于N的既约真分数(即无法再进行约分的小于1的分数)
  • 输入说明
    单独的一行,一个自然数N(1...20)
  • 输出说明
    每个分数单独占一行

按照分数大小升序排列

对于分子为0的分数,仅输出0/1,不输出其它分母的分数,比如0/2, 0/3。

  • 输入范例
cpp 复制代码
4
  • 输出范例
cpp 复制代码
0/1
1/4
1/3
1/2
2/3
3/4

感想:构造真约数string 类型,把真约数装vector里,再真约数排序;输出即可。

代码如下:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

//比较真约数的大小,降序排序
bool compare(const string &a,const string &b) {
    auto pos_left = a.find('/');
    auto pos_right = b.find('/');
    int left_numerator = stoi(a.substr(0,pos_left));//左边真约数的分子
    int left_denominator = stoi(a.substr(pos_left+1));//左边真约数的分母
    int right_numerator = stoi(b.substr(0,pos_right));//右边真约数的分子
    int right_denominator = stoi(b.substr(pos_right+1));//右边真约数的分母

    return left_numerator*right_denominator<left_denominator*right_numerator;
}

bool commonDivisor(const string &s) {
    auto pos = s.find('/');
    int a =  stoi(s.substr(0,pos));
    int b = stoi(s.substr(pos+1));
    for(int i = 2; i<=a; ++i) {
        if(a%i==0 && b%i == 0)
            return true;
    }
    return false;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<string> target;
    target.push_back("0/1");
    for(int i = 1; i<n; ++i) {
        for(int j = i+1; j<=n; ++j) {
            string temp = to_string(i) +"/"+to_string(j);
            if(commonDivisor(temp))
                continue;
            target.push_back(temp);
        }
    }
    sort(target.begin(),target.end(),compare);
    for(string s : target) {
        cout<<s<<endl;
    }

    return 0;
}


相关推荐
老歌老听老掉牙10 分钟前
圆柱端面四平面交线及其在yoz面投影的几何解析与 Python 实现
开发语言·python·平面
繁星蓝雨16 分钟前
C++设计原理———多重继承(虚基类、菱形继承、委托、重命名、基类和成员初始化)
c++·委托·多重继承·mi·显式初始化列·虚基类·对象布局
旖旎夜光1 小时前
【C++ 基础入门】命名空间、输入输出、缺省参数与函数重载
开发语言·c++·笔记·学习
俩个逗号。。1 小时前
Kotlin flow 详解
android·开发语言·kotlin
程序猿乐锅2 小时前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
扶尔魔ocy2 小时前
【QT入门到晋级】用开源的自定义控件开发
c++·qt·自定义控件
AiNightVision2 小时前
无人机夜视模块如何选择?——从参数指标到系统集成的完整选型指南
人工智能·算法·计算机视觉·车载系统·无人机·视频·智能硬件
牧羊人.3333 小时前
卷积神经网络之VGG
人工智能·深度学习·神经网络·算法·cnn
akinggw3 小时前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt