当前位置: 首页 > news >正文

C++将整数换成分数 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析

目录

C++将整数换成分数

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、运行结果

五、考点分析

六、 推荐资料

1、C++资料 

2、Scratch资料

3、Python资料


C++将整数换成分数

2024年信息素养大赛 C++复赛真题解析

一、题目要求

1、编程实现

一个小于 100 万的正整数 n,尝试把n变成带分数形式,也就是 n=a+b/c,其中 a,b,c是三个正整数,并且数字 1~9(不含 0)在 a、b、c中,必须出现,且只能出现一次。例如:100=3+69258/714其中1到9这9个数字全都出现了,并且只 出现一次。当然100 还等于 82+ 3546/197,也就是说将 100 变成带分数形式,会有两种组合方式。事实上 100,可以写成 11种1到 9组成整数加上分数的形式。请编写一个程序,根据一个输入 N,程序输出该数字用数码 1~9 不重复不遗漏地,组成带分数表示的全部可能性。不要求输出每个表示,只输出有多少种表示法!

2、输入输出

输入描述:输入一行,表示要分解的正整数。

输出描述:只有一行,一个整数,即有多少种表示法

输入样例:

100

输出样例:

11

二、算法分析

  1. 从给定题目的初步分析可以看出,拿到这道题可能小朋友们不知道如何入手
  2. 也有的小朋友可能会直接从a,b,c三个数字入手,采用三重循环完成,但是n是10的6次方,三重循环也就是n的18次方,直接超时了;显然暴力破解不可取
  3. 那有什么方法比较合适呢,可以换个思路从三个数对应的位数出发,因为n是一个小于100万的整数,n的最大位数就是7位
  4. 题目还明确告知a,b,c这三个数都是1到9的不重复数字,且必须都包含,所以这其实是一个数学的排列问题,可以直接使用STL里面的next_permutation进行排列
  5. 接着可以将每次排列后的组合进行分割,分成3部分,a是第一部分,b是中间部分,c是最后部分;先考虑数字a,最大就是一个7位数;而b和c至少是一个一位数
  6. 接着只要按分割的位数进行遍历,接着满足a+b/c=n,同时b/c是一个整数即可

三、程序编写

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int getCount(int n) {vector<int> nums = {1,2,3,4,5,6,7,8,9};int res = 0;do {for (int ai = 1; ai <= 7; ++ai) { // a最多7位数int a = 0;for (int i = 0; i < ai; ++i) a = a * 10 + nums[i];if (a >= n) break; // 剪枝:a >= n时跳过for (int bi = ai + 1; bi <= 8; ++bi) { //b c至少1位int b = 0;for (int i = ai; i < bi; ++i) b = b * 10 + nums[i];int c = 0;for (int i = bi; i < 9; ++i) c = c * 10 + nums[i];if (b % c == 0 && a + b / c == n) res++;}}} while (next_permutation(nums.begin(), nums.end()));return res;
}int main() {int n;cin >> n;cout << getCount(n) << endl;return 0;
}

 本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102

四、运行结果

100
11888
4

五、考点分析

难度级别:难,这题相对而言有一定的难度,在于思路的转变,具体主要考察如下:

  1. 分析题目 找到解题思路
  2. 充分掌握变量的定义和使用
  3. 学会排列组合函数next_permutation的使用
  4. 学会数字的分割和思路转换,以及优化
  5. 学会输入流对象cin的使用,从键盘读入相应的数据
  6. 学会for循环的使用,在确定循环次数的时候推荐使用学会
  7. 学会while循环的使用,在不确定循环次数的时候推荐使用
  8. 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
  9. 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
  10. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  11. 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
  12. 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

六、 推荐资料

  • 所有考级比赛学习相关资料合集【推荐收藏】

1、C++资料 

  • 电子学会C++一级历年真题解析
  • 电子学会C++二级历年真题解析
  • 蓝桥杯C++选拔赛真题解析

    2、Scratch资料

    • Scratch3.0系列视频课程资料
    • 零基础学习scratch3.0【入门教学 免费】
    • 零基础学习scratch3.0【视频教程 114节 免费】
    • 历届蓝桥杯scratch国赛真题解析
    • 历届蓝桥杯scratch省赛真题解析
    • 历届蓝桥杯scratch STEMA选拔赛真题解析
    • 历届蓝桥杯科技素养计算思维真题解析
    • 蓝桥杯专项训练考前集训100题
    • 画图-scratch编程考级99图
    • 电子学会历年scratch等级考试一级真题解析
    • 电子学会历年scratch等级考试二级真题解析
    • 电子学会历年scratch等级考试三级真题解析
    • 电子学会历年scratch等级考试四级真题解析

    3、Python资料

    • 蓝桥杯python选拔赛真题详解
    • 蓝桥杯python省赛真题详解

    • 蓝桥杯python国赛真题详解

    • python等级一级真题解析【电子学会】

    • python等级二级真题解析【电子学会】

    • python等级三级真题解析【电子学会】

    • python等级四级真题解析【电子学会】

    相关文章:

  • React useCallback函数
  • Oracle-ACL配置
  • “淘宝闪购”提前4天全量,意味着什么?
  • 使用PyTorch实现线性回归:从零实现到高级API
  • Python-pandas-操作Excel文件(读取数据/写入数据)及Excel表格列名操作详细分享
  • 轻量级在线Excel预览工具
  • [面试]SoC验证工程师面试常见问题(四)
  • 【多云PaaS】跨云平台的无缝迁移方案
  • 【中间件】brpc_基础_butex.h
  • FastAPI中的复杂查询与原子更新指南
  • 【Linux】Petalinux U-Boot
  • 【中间件】brpc_基础_bthread头文件
  • 精益数据分析(36/126):SaaS商业模式的指标动态与实践案例
  • 数据分析_问题/优化
  • 力扣838.推多米诺随笔
  • 变转速振动信号分析处理与故障诊断算法模块
  • C++ 动态内存管理
  • VGG网络模型
  • 云原生后端架构的挑战与应对策略
  • mysql--索引
  • 盐城经济技术开发区党工委书记王旭东接受纪律审查和监察调查
  • 80后女博士黄双燕拟提名为内蒙古盟市政府(行署)副职人选
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应
  • 娃哈哈:调整产销布局致部分工厂停工,布局新产线可实现自主生产,不排除推新品牌
  • 上海虹桥国际咖啡文化节周五开幕,来看Coffeewalk通关攻略
  • 山东市监局回应“盒马一批次‘无抗’鸡蛋抽检不合格后复检合格”:系生产商自行送检