C++蓝桥杯填空题(攻克版)

news2025/4/18 8:00:31
片头

嗨~小伙伴们,咱们继续攻克填空题,先把5分拿到手~


第1题  数位递增的数

这道题,需要我们计算在整数 1 至 n 中有多少个数位递增的数。

什么是数位递增的数呢?一个正整数如果任何一个数位不大于右边相邻的数位。比如:1234是一个数位递增的数;4321则不是。

解题思路:我们可以把1~n个数全部转化为字符串类型。用另外一个字符串类型的变量s来保存。再对当前这个字符串进行排序(排升序)。如果二者相同,那么该数是数位递增的数。

#include <bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;      // 使用标准命名空间
int main()
{

  int n;
   cin >> n;  // 从标准输入读取一个整数n

    int ans = 0;  // 初始化计数器ans为0,用于统计符合条件的数字个数
  for(int i = 1; i <= n; i++)  // 遍历从1到n的每个数字
  {
    string s = to_string(i);    // 将当前数字i转换为字符串形式
    string s1 = s;              // 创建字符串s的副本s1
    sort(s1.begin(), s1.end()); // 对s1中的字符按升序排序
    if(s == s1) ans++;          // 如果原字符串s与排序后的s1相同,说明数字是升序排列的
  }

    cout << ans << endl;        // 输出符合条件的数字个数
  
  return 0;
}

第2题  数位和

这道题目很简单,将1~1000所有数字的数位和算出来,累加到变量SUM中,就可以了。

#include <iostream>
using namespace std;

//求数位和
int get_sum(int x){
  int temp = x;
  int sum = 0;
  while(temp != 0){
    int r = temp % 10;
    sum += r;
    temp /= 10;
  }
  return sum;
}

int main()
{
  int SUM = 0;
  for(int i = 1; i<= 1000; i++)
  {
      SUM += get_sum(i);
  }

  cout << SUM << endl;
  return 0;
}

第3题  数位比较

这道题,是给定我们区间范围,计算满足数字的数位上的 0 的个数要大于数位上的 1 的个数。

#include <iostream>
using namespace std;

int Func(int x) 
{
    int temp = x;     // 创建临时变量保存x的值
    int num1 = 0, num2 = 0; // num1统计0的个数,num2统计1的个数
    
    while(temp != 0) {  // 循环处理每一位数字
        if(temp % 10 == 0) num1++; // 如果当前位是0,num1加1
        if(temp % 10 == 1) num2++; // 如果当前位是1,num2加1
        temp /= 10;     // 去掉已处理的最低位
    }
    
    if(num1 > num2) return 1; // 如果0比1多,返回1
    else return 0;            // 否则返回0
}

int main()
{
    int L, R;        // 定义区间端点变量
    cin >> L >> R;   // 输入区间范围[L, R]
    
    int ans = 0;     // 初始化计数器
    for(int i = L; i <= R; i++) {  // 遍历区间内每个数字
        if(Func(i) == 1) ans++;    // 如果满足条件,计数器加1
    }
    
    cout << ans << endl; // 输出结果
  return 0;
}

第4题  最小数位和

这道题,虽然数据量比较大,但是我们不要被题目唬住了。

解题思路:①可以定义8行8列的二维数组存储64个数据。

    int a[8][8] = {
      {454771,329157,801601,580793,755604,931703,529875,361797},
      {604358,529564,574776,821517,195563,688516,223321,607845},
      {284772,603562,543328,707484,533688,380468,233733,257995},
      {896582,670074,912386,702393,722092,834842,126346,606526},
      {376981,910643,413754,945725,817853,651778,350775,676550},
      {316935,487808,939526,900568,423326,298936,927671,539773},
      {136326,717022,886675,466684,436470,558644,267231,902422},
      {743580,857864,529622,320921,595409,486860,951114,558787}
    };

 ②题目问我们数位和最小的数,咱们先实现一个求数位和的函数。

//求数位和
int get_sum(int a) {
    int sum = 0;
    int temp = a;
    while (temp != 0) {
        int r = temp % 10;
        sum += r;
        temp /= 10;
    }
    return sum;
}

接着我们可以在main函数中调用get_sum函数。

定义变量min,初始值为INT_MAX(需要引用头文件 <climits>,但是 <bits/stdc++.h> 已经包含了)。

从第1行第1列,也就是从第1个元素(a[0][0])开始遍历,依次计算每个数的数位和,保存到变量d中。如果当前的数位和d<min,那么将d赋给min (min = d),同时用另一个变量num保存当前的数。

    int min = INT_MAX;  // 初始化最小和为最大整数值
    int num = 0;        // 存储数字和最小的那个数
    int d = 0;          // 临时存储数字和

    // 遍历二维数组
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            d = get_sum(a[i][j]);  // 计算当前数的数字和
            if (d < min) {         // 如果比当前最小值小
                min = d;           // 更新最小值
                num = a[i][j];     // 更新对应的数
            }
        }
    }

最后输出数位和最小的数

    cout << num << endl;  // 输出结果

ok,本道题的完整代码如下:

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

//求数位和
int get_sum(int a){
  int sum = 0;
  int temp = a;
  while(temp != 0){
    int r = temp % 10;
    sum += r;
    temp /= 10;
  }
  return sum;
}

int main()
{
    int a[8][8] = {
      {454771,329157,801601,580793,755604,931703,529875,361797},
      {604358,529564,574776,821517,195563,688516,223321,607845},
      {284772,603562,543328,707484,533688,380468,233733,257995},
      {896582,670074,912386,702393,722092,834842,126346,606526},
      {376981,910643,413754,945725,817853,651778,350775,676550},
      {316935,487808,939526,900568,423326,298936,927671,539773},
      {136326,717022,886675,466684,436470,558644,267231,902422},
      {743580,857864,529622,320921,595409,486860,951114,558787}
    };

    int min = INT_MAX;  // 初始化最小和为最大整数值
    int num = 0;        // 存储数字和最小的那个数
    int d = 0;          // 临时存储数字和

    // 遍历二维数组
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            d = get_sum(a[i][j]);  // 计算当前数的数字和
            if (d < min) {         // 如果比当前最小值小
                min = d;           // 更新最小值
                num = a[i][j];     // 更新对应的数
            }
        }
    }

    cout << num << endl;  // 输出结果

  return 0;
}

第5题  数位和相等

题目让我们求第23个数位和相等的正整数,数位和相等:一个正整数转化成二进制与转换成八进制后所有数位的数字之和相等。

定义变量count(计数器),表示满足条件的第几个数;定义变量i,初始值为1,从1开始检查数字。

没有给定循环范围,因此我们采用while循环。因为求第23个数位和相等的数,如果count从0开始,那么到22结束;如果count从1开始,那么到23结束。

    int i = 1;     // 从1开始检查数字
    int count = 0; // 计数器,记录满足条件的数字个数

    while(count < 23)  //count的取值范围: 0~22,总共23个数
    {
        if(S(i)) count++; // 如果i满足条件,计数器加1
        i++;              // 检查下一个数字
    }

当count==23时,退出while循环。但是此时 i 已经自增,因此需要输出 i-1。

  // 注意:此时i已经自增过了,所以要输出i-1
  cout << i-1 << endl;

接下来我们需要实现S函数,判断1个数的二进制和八进制的数位和是否相同。

int S(int N) {
    if (N <= 0)  return 0;  // 处理非正整数

    int sum2 = 0, sum8 = 0;   // sum2存储二进制和,sum8存储八进制和
    int temp = N;             // 临时变量保存N的值

    //计算二进制各位和
    while (temp != 0)
    {
        int r = temp % 2;   // 取二进制最后一位
        sum2 += r;          // 累加到sum2
        temp /= 2;          // 去掉已处理的最后一位
    }

    temp = N;  // 重置temp为原始值

    //计算八进制各位和
    while (temp != 0)
    {
        int ge = temp % 8;    // 取八进制最后一位
        sum8 += ge;
        temp /= 8;
    }

    if (sum2 == sum8) return 1;  // 和相等返回1
    else return 0;               // 不等返回0
}

欧克啦,本题的完整代码如下:

#include <iostream>
using namespace std;

int S(int N) {
    if (N <= 0)  return 0;  // 处理非正整数

    int sum2 = 0, sum8 = 0;   // sum2存储二进制和,sum8存储八进制和
    int temp = N;             // 临时变量保存N的值

    //计算二进制各位和
    while (temp != 0)
    {
        int r = temp % 2;   // 取二进制最后一位
        sum2 += r;          // 累加到sum2
        temp /= 2;          // 去掉已处理的最后一位
    }

    temp = N;  // 重置temp为原始值

    //计算八进制各位和
    while (temp != 0)
    {
        int ge = temp % 8;    // 取八进制最后一位
        sum8 += ge;
        temp /= 8;
    }

    if (sum2 == sum8) return 1;  // 和相等返回1
    else return 0;               // 不等返回0
}

int main()
{
    int i = 1;     // 从1开始检查数字
    int count = 0; // 计数器,记录满足条件的数字个数

    while (count < 23)  //count的取值范围: 0~22,总共23个数
    {
        if (S(i)) count++; // 如果i满足条件,计数器加1
        i++;               // 检查下一个数字
    }

    // 注意:此时i已经自增过了,所以要输出i-1
    cout << i - 1 << endl;
    return 0;
}

第6题   数位计数

这道题,很简单。统计1个数一共有多少个数位。n的范围比较大,因此我们可以用 long long 来定义。

#include <iostream>
using namespace std;
typedef long long ll;

ll get_count(ll x){
    ll temp = x;
    ll count = 0;
    while(temp != 0)
    {
       temp = temp / 10;
       count++;  //统计数位个数
    }
    return count;
}

int main()
{
  ll n;
  cin >> n;
   
   ll ret = get_count(n);
   cout << ret << endl;

  return 0;
}

第7题  数位和

首先,题目给定范围:①质数,因此我们需要实现判断是否为质数的函数; ②计算质数的各个数位之和,判断是否等于23。我们需要实现计算数位和的函数。

判断是否为质数的代码如下:

//判断是否为质数
bool is_prime(int x)
{
  //这里必须是 i < sqrt(x), 不然编译报错
  for(int i = 2; i < sqrt(x) ; i++)
  {
    if(x % i == 0) return 0; //不是质数,返回0
  }
  return 1;//只能被 1 和本身整除,是质数,返回1
}

需要额外注意:质数判断应从2开始,且只需检查到\sqrt{x}即可

计算数位和的函数如下:

//计算数位和
int get_sum(int x)
{
    int temp = x;
    int sum = 0;
    while (temp != 0)
    {
        int r = temp % 10;
        sum += r;
        temp /= 10;
    }
    return sum;
}

最后在main函数里面调用这2个函数即可。

  //计数器,统计满足条件的数的个数
  int cnt = 0;
  for(int i = 3; i <= 1000000; i++)
  {
      //如果该数为质数并且数位之和为23,计数器+1
      if(is_prime(i) && get_sum(i) == 23) cnt++; 
  }
  cout << cnt <<endl; //输出结果

欧克啦,本题完整代码如下:

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

//判断是否为质数
bool is_prime(int x)
{
  //这里必须是 i < sqrt(x), 不然编译报错
  for(int i = 2; i < sqrt(x) ; i++)
  {
    if(x % i == 0) return 0;
  }
  return 1;
}

//计算数位和
int get_sum(int x)
{
  int temp = x;
  int sum = 0;
  while(temp != 0)
  {
      int r = temp % 10;
      sum += r;
      temp /= 10;
  }
    return sum;
}

int main()
{
  //计数器,统计满足条件的数的个数
  int cnt = 0;

  for(int i = 3; i <= 1000000; i++)
  {
      //如果该数为质数并且数位之和为23,计数器+1
      if(is_prime(i) && get_sum(i) == 23) cnt++; 
  }

  cout << cnt <<endl; //输出结果

  return 0;
}

第8题  倍数

这道题很简单,代码如下:

#include <iostream>
using namespace std;
int main()
{
  int cnt = 0;
  for(int i = 1; i <= 2020; i++){
    if(i % 4 == 0 && i % 6 == 0) cnt++;
  }
  cout << cnt << endl;
  return 0;
}

第9题  约数

代码如下:

#include <iostream>
using namespace std;
int main()
{
    int cnt = 0;
    for (int i = 1; i <= 2020; i++) {
        if (2020 % i == 0) cnt++;
    }
    cout << cnt << endl;
    return 0;
}

 第10题  公约数

代码如下:

#include <iostream>
using namespace std;
int main()
{
    int cnt = 0;
    for (int i = 1; i <= 2020; i++) {
        if (2020 % i == 0 && 3030 % i == 0) cnt++;
    }
    cout << cnt << endl;
    return 0;
}

 第11题  约数个数

代码如下:

#include <iostream>
using namespace std;

int main()
{
    int n = 1200000;
    int ans = 0;

    for (int i = 1; i <= n; i++) {
        if (n % i == 0) ans++;
    }
    cout << ans;
    return 0;
}

片尾

今天我们巩固了填空题基础,希望看完这篇文章对友友们有所帮助!!!

点赞收藏加关注!!!

谢谢大家!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2332928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JS 构造函数实现封装性

通过构造函数实现封装性&#xff0c;构造函数生成的对象独立存在互不影响 创建实例对象时&#xff0c;其中函数的创建会浪费内存

一站式云分账系统!智能虚拟户分账系统成电商合规“刚需”

电商智能分账解决&#xff1a;电商一站式破解多平台资金管理难题集中管理分账&#xff0c;分账后秒到&#xff0c;并为针对电商行业三大核心痛点提供高效应对策略&#xff1a; 1. 票据合规困境 智能对接上下游交易数据流&#xff0c;构建自动化票据协同机制&#xff0c;有效规…

数组 array

1、数组定义 是一种用于存储多个相同类型数据的存储模型。 2、数组格式 &#xff08;1&#xff09;数据类型[ ] 变量名&#xff08;比较常见这种格式&#xff09; 例如&#xff1a; int [ ] arr0&#xff0c;定义了一个int类型的数组&#xff0c;数组名是arr0&#xff1b; &am…

linux命令六

逻辑卷 作用: 整合分散空间 空间支持扩大 步骤一:建立卷组&#xff08;VG&#xff09; 格式&#xff1a;vgcreate 卷组名 设备路径……. 如果分区不是卷组,则会先调用pvcreat 组建物理卷,再将其组建成组卷 Successfully:成功 example&#xff1a;例子 在man帮助中可以使用examp…

深度学习总结(8)

模型工作流程 模型由许多层链接在一起组成&#xff0c;并将输入数据映射为预测值。随后&#xff0c;损失函数将这些预测值与目标值进行比较&#xff0c;得到一个损失值&#xff0c;用于衡量模型预测值与预期结果之间的匹配程度。优化器将利用这个损失值来更新模型权重。 下面是…

基于docker搭建redis集群环境

在redis目录下创建redis-cluster目录&#xff0c;创建docker-compose.yml文化和generate.sh文件 【配置generate.sh文件】 for port in $(seq 1 9); \ do \ mkdir -p redis${port}/ touch redis${port}/redis.conf cat << EOF > redis${port}/redis.conf port 6379 …

分治-归并系列一>翻转对

目录 题目&#xff1a;解析&#xff1a;策略一&#xff1a; 代码&#xff1a;策略二&#xff1a; 代码&#xff1a; 题目&#xff1a; 链接: link 这题和逆序对区别点就是&#xff0c;要找到前一个元素是后一个元素的2倍 先找到目标值再&#xff0c;继续堆排序 解析&#xff1…

FFMPEG大文件视频分割传输教程,微信不支持1G文件以上

如下是一个2.77g的文件分割教程 . 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑&#xff0c;是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FF…

MySQL5.7数据库部署和安装

1. 准备系统环境 Vmawre安装CentOS7 略… 2. 下载MySQL5.7安装包 下载地址&#xff1a; https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz 3. 卸载系统自带的MariaDB sudo yum remove $(rpm -qa | grep mariadb)4. 解压安…

Java学习手册:JVM、JRE和JDK的关系

在Java生态系统中&#xff0c;JVM&#xff08;Java虚拟机&#xff09;、JRE&#xff08;Java运行时环境&#xff09;和JDK&#xff08;Java开发工具包&#xff09;是三个核心概念。它们共同构成了Java语言运行和开发的基础。理解它们之间的关系对于Java开发者来说至关重要。本文…

如何用 esProc 实现 Oracle 和 MySQL 的混合运算

逻辑数仓可以实现多源混算&#xff0c;但需要配置视图、预处理数据&#xff0c;结构太沉重。duckdb 是轻量级的方案&#xff0c;但没有内置 Oracle 的 connector&#xff0c;自己开发难度又太高。同为轻量级方案&#xff0c;esProc 支持 JDBC 公共接口&#xff0c;可以实现任何…

Linux 第二讲 --- 基础指令(二)

前言 这是基础指令的第二部分&#xff0c;但是该部分的讲解会大量使用到基础指令&#xff08;一&#xff09;的内容&#xff0c;为了大家的观感&#xff0c;如果对Linux的一些基本指令不了解的话&#xff0c;可以先看基础指令&#xff08;一&#xff09;&#xff0c;同样的本文…

P8627 [蓝桥杯 2015 省 A] 饮料换购

题目描述 思路 一是可以多枚举几个数&#xff0c;找找规律 二可以模拟 代码 #include<bits/stdc.h> #define int long long using namespace std;const int N 2e510;int a[N]; int b[N]; //前缀和 signed main() {int n;cin >> n; //表示初始的饮料盖int ans …

《Vue Router实战教程》12.不同的历史记录模式

欢迎观看《Vue Router 实战&#xff08;第4版&#xff09;》视频课程 不同的历史记录模式 在创建路由器实例时&#xff0c;history 配置允许我们在不同的历史模式中进行选择。 Hash 模式 hash 模式是用 createWebHashHistory() 创建的&#xff1a; import { createRouter,…

第十五届蓝桥杯大赛软件赛省赛Python 大学 B 组试做(下)【本期题单: 缴纳过路费, 纯职业小组】

本期题单&#xff1a;缴纳过路费&#xff0c;纯职业小队 文章目录 缴纳过路费题目思路分析代码 纯职业小组题目思路分析 感谢大伙观看&#xff0c;别忘了三连支持一下大家也可以关注一下我的其它专栏&#xff0c;同样精彩喔~下期见咯~ 缴纳过路费 题目 题目链接&#xff1a;缴…

[UEC++]UE5C++各类变量相关知识及其API(更新中)

基础变量 UE自己定义的目的&#xff1a;1.跨平台&#xff1b;2.兼容反射&#xff1b;3.方便宏替换 FString 基础赋值与初始化 遍历与内存 迭代器访问 清除系列操作 合并 插入与移除 RemoveFromStart是从开头看&#xff0c;没有则移除失败返回false&#xff1b; RemoveFromEnd是…

RK3588 android12 适配 ilitek i2c接口TP

一&#xff0c;Ilitek 触摸屏简介 Ilitek 提供多种型号的触控屏控制器&#xff0c;如 ILI6480、ILI9341 等&#xff0c;采用 I2C 接口。 这些控制器能够支持多点触控&#xff0c;并具有优秀的灵敏度和响应速度。 Ilitek 的触摸屏控制器监测屏幕上的触摸事件。 当触摸发生时&a…

利用安固软件实现电脑屏幕录像:四种实用方法分享

在日常工作中&#xff0c;有时我们需要录制电脑屏幕以进行教学演示、软件操作记录或重要会议的存档。安固软件终端安全管理系统提供了强大的屏幕录像功能&#xff0c;可以满足这些需求。 接下来&#xff0c;本文将介绍如何使用安固软件设置电脑实时画面录像&#xff0c;并分享…

[Effective C++]条款30:透彻了解inlining的里里外外

. 1、内联函数 inline内联函数的设计是为了消除函数调用的开销&#xff0c;在编译期间由编译器将函数体插入到每个调用点&#xff0c;来避免常规函数调用时的压栈、跳转和返回等操作&#xff0c;减少函数调用的时间开销。 1.1、内联函数作用 减少函数调用开销&#xff1a; 消…

这种情况是应为VScode的版本太新了,更新到1.86版本后要求远程连接服务器的内核版本不符合条件

这种情况是应为VScode的版本太新了&#xff0c;更新到1.86版本后要求远程连接服务器的内核版本不符合条件 解决方法 vscode降级&#xff0c;使用1.86以前的版本。亲测这种方法成功解决 首先关闭VSCode自动更新 Windows下载1.85版本链接&#xff1a;https://update.code.visua…