【蓝桥杯】 C++ 既约分数

文章介绍了如何通过编程计算在1到2020之间有多少个既约分数,即分子和分母的最大公约数为1的分数。代码使用C++编写,通过双重循环遍历所有可能的分子和分母组合,利用一个函数判断是否为既约分数,最后输出计数结果。

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

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个分数的分子和分母的最大公约数是 1,这个分数称为既约分数。
例如 3 4 {3\over 4} 43 1 8 {1\over 8} 81 7 1 {7\over 1} 17, 都是既约分数。
请问,有多少个既约分数,分子和分母都是 1 到 2020 之间的整数(包括 1 和 2020)?

实现代码

#include<bits/stdc++.h>
using namespace std;
bool jiyue(int a,int b)
{
    for(int i=2;i<=max(a,b);i++)
    {
        if(a%i==0 && b%i==0)
        {
            // 有公约数返回 0
            return 0;
        }
    }
    // 没公约数返回 1
    return 1;
}

int main()
{
    int count=0;
    for(int mu=1;mu<=2020;mu++)
    {
        for(int zi=1;zi<=2020;zi++)
        {
            if(jiyue(zi,mu))
            {
                count++;
            }
        }
    }

    cout<<count<<endl;
}

解题思路

首先循环分子和分母,在循环里判断它们是否为既约分数,如果是就给 count 加 1,不是的话继续循环。判断既约分数的函数很好写,输入两个数,判断两个数是否有共同的约数,如果有就返回 0,循环结束都没有返回 0,就返回 1,表明这两个数是既约分数。

注意点

  • 注意判断既约分数的函数,for 循环的范围要算上 max(a,b),因为有时候分子分母一样,就会多算。
bool jiyue(int a,int b)
{
    for(int i=2;i<=max(a,b);i++)
    {
        if(a%i==0 && b%i==0)
        {
            // 有公约数返回 0
            return 0;
        }
    }
    // 没公约数返回 1
    return 1;
}
### 关于蓝桥杯 C++ B组省一等奖分数线 蓝桥杯作为一项全国性的编程竞赛,其评分标准奖项划分通常由各省赛区的具体情况决定。虽然具体的分数要求可能因年份地区而有所不同,但一般情况下,C++ B组的省一等奖分数线会基于以下几个因素综合评估: 1. **参赛人数与竞争激烈程度** 不同省份的参赛人数不同,因此影响了分数线的变化。一般来说,参赛人数较多且整体水平较高的地区,省一等奖的分数线也会相对较高。 2. **试难度** 如果当年试的整体难度较大,则可能导致平均分下降,从而降低省一等奖的分数线;反之亦然[^3]。 3. **官方划定比例** 蓝桥杯通常按照一定比例分配奖项名额,其中省一等奖的比例大占参赛选手总数的10%左右。这意味着即使某一年目较难,只要排名进入前10%,就有机会获得省一等奖[^5]。 #### 历史数据参考 根据往年的经验以及部分公开资料,以下是关于C++ B组省一等奖分数线的一些典型范围: - 在一些竞争较为激烈的省份(如北京、上海),省一等奖分数线可能会达到 **70~80分** 或更高。 - 对于中等竞争力的省份,分数线通常位于 **60~70分** 左右。 - 若是在参赛人数较少或者整体水平较低的地区,省一等奖分数线甚至可能低至 **50~60分**[^4]。 需要注意的是,上述仅为大致估计值,具体分数线仍需等待每年比赛结束后由组委会正式公布。 ```cpp // 示例代码:假设我们可以通过模拟计算来估算某个特定区域内的获奖概率 #include <iostream> using namespace std; int main() { double totalScore = 0; int participantCount, topTenPercentThreshold; cout << "请输入本省参赛总人数: "; cin >> participantCount; // 计算理论上的前十名门槛位置 topTenPercentThreshold = (participantCount * 10) / 100; cout << "预计该省省一最低排名为:" << topTenPercentThreshold << endl; return 0; } ``` 此程序仅用于演示如何通过输入参数简单推导出潜在的获奖区间,并不涉及实际得分细节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值