10 第 K 个最小的素数分数----来源于陈C同学(CC)

该博客介绍了一个编程问题,涉及数组处理和排序。给定一个递增排序且包含1和素数的数组,任务是找到第K个最小的分数,分数由数组中的两个不同元素构成。通过构建所有可能的分数对并排序,可以找到第K个最小的分数。示例展示了输入和输出格式,并提供了一个C++解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源于陈C同学(CC)

来源于陈C同学(CC)

来源于陈C同学(CC)

10 第 K 个最小的素数分数

作者: Turbo时间限制: 1S章节: 课程设计

问题描述 :

给你一个按递增顺序排序的数组 arr 和一个整数 k 。数组 arr 由 1 和若干 素数  组成,且其中所有整数互不相同。

对于每对满足 0 <= i < j < arr.length 的 i 和 j ,可以得到分数 arr[i] / arr[j] 。

那么第 k 个最小的分数是多少呢?  

请输出相应的arr[i]和arr[j] 。

示例 1:

输入:

4

1 2 3 5

3

输出:

2 5

解释:已构造好的分数,排序后如下所示: 

1/5, 1/3, 2/5, 1/2, 3/5, 2/3

很明显第三个最小的分数是 2/5

示例 2:

输入:

2

1 7

1

输出:

1 7

输入说明 :

输入三行:

第一行输入一个整数n表示数组arr的长度。

第二行输入n个整数表示数组的元素。

第三行输入一个整数表示k.

提示:

    2 <= n <= 1000

    1 <= arr[i] <= 3 * 10^4

    arr[0] == 1

    arr[i] 是一个素数 ,i > 0

    arr 中的所有数字 互不相同 ,且按 严格递增 排序

    1 <= k <= n * (n - 1) / 2

输出说明 :

输出一行两个整数表示结果,整数间隔一个空格。

输入范例 :

#include<bits/stdc++.h>
using namespace std;

typedef typename std::pair<int,int> MyPair;//first 分子,second 为分母

int arr[1005];

bool compare(MyPair a,MyPair b)
{
    return a.first*b.second<a.second*b.first;
}


int main()
{
    int n,i,j,k;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    cin>>k;
    MyPair tmp;
    vector<MyPair> Fractions;
    for(i=0;i<n;i++)
    {
        for(j=i+1;j<n;j++)
        {
            tmp.first=arr[i];
            tmp.second=arr[j];
            Fractions.push_back(tmp);
        }
    }

    sort(Fractions.begin(),Fractions.end(),compare);
    cout<<Fractions[k-1].first<<" "<<Fractions[k-1].second;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨骅麟(Hadrain Young)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值