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

片头

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


第1题  数位递增的数

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

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

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

#include <bits/stdc++.h>  // 包含所有标准库头文件
using namespace std;      // 使用标准命名空间
int main()
{int n;cin >> n;  // 从标准输入读取一个整数nint ans = 0;  // 初始化计数器ans为0,用于统计符合条件的数字个数for(int i = 1; i <= n; i++)  // 遍历从1到n的每个数字{string s = to_string(i);    // 将当前数字i转换为字符串形式string s1 = s;              // 创建字符串s的副本s1sort(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加1if(temp % 10 == 1) num2++; // 如果当前位是1,num2加1temp /= 10;     // 去掉已处理的最低位}if(num1 > num2) return 1; // 如果0比1多,返回1else 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满足条件,计数器加1i++;              // 检查下一个数字}

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

  // 注意:此时i已经自增过了,所以要输出i-1cout << 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;          // 累加到sum2temp /= 2;          // 去掉已处理的最后一位}temp = N;  // 重置temp为原始值//计算八进制各位和while (temp != 0){int ge = temp % 8;    // 取八进制最后一位sum8 += ge;temp /= 8;}if (sum2 == sum8) return 1;  // 和相等返回1else 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;          // 累加到sum2temp /= 2;          // 去掉已处理的最后一位}temp = N;  // 重置temp为原始值//计算八进制各位和while (temp != 0){int ge = temp % 8;    // 取八进制最后一位sum8 += ge;temp /= 8;}if (sum2 == sum8) return 1;  // 和相等返回1else return 0;               // 不等返回0
}int main()
{int i = 1;     // 从1开始检查数字int count = 0; // 计数器,记录满足条件的数字个数while (count < 23)  //count的取值范围: 0~22,总共23个数{if (S(i)) count++; // 如果i满足条件,计数器加1i++;               // 检查下一个数字}// 注意:此时i已经自增过了,所以要输出i-1cout << 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,计数器+1if(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,计数器+1if(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.mzph.cn/news/900905.shtml

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

相关文章

【Python】数据结构

【Python】数据结构&#xff1a; Series&#xff1a;1、通过列表创建Series类对象2、显示地给数据指定标签索引3、通过字典创建Series类对象4、获取索引5、获取数据 DataFrame&#xff1a;1、通过数组创建一个DataFrame类对象2、指定列索引3、指定行索引4、获取列的数据5、查看…

Android XML布局与Compose组件对照手册

下面我将详细列出传统 XML 布局中的组件与 Compose 组件的对应关系&#xff0c;帮助您更好地进行迁移或混合开发。 基础布局对应 XML 布局Compose 组件说明LinearLayout (vertical)Column垂直排列子项LinearLayout (horizontal)Row水平排列子项FrameLayoutBox层叠子项Relativ…

云原生运维在 2025 年的发展蓝图

随着云计算技术的不断发展和普及&#xff0c;云原生已经成为了现代应用开发和运维的主流趋势。云原生运维是指在云原生环境下&#xff0c;对应用进行部署、监控、管理和优化的过程。在 2025 年&#xff0c;云原生运维将迎来更加广阔的发展前景&#xff0c;同时也将面临着一系列…

js day5

复习模板字符串&#xff1a; 在输出语句里面 document.write(我今年${a}岁了)中间是反引号&#xff1b;里面是${变量}&#xff1b; 复习基本类型 number String null undefined boolean 检测数据类型输出typedf 变量则可&#xff1b; 添加链接描述 复习样式变量table什么的边…

SmolVLM2: The Smollest Video Model Ever(三)

这是对《SmolLM2: When Smol Goes Big — Data-Centric Training of a Small Language Model》的翻译阅读 摘要 虽然大语言模型在人工智能的许多应用中取得了突破&#xff0c;但其固有的大规模特性使得它们在计算上成本高昂&#xff0c;并且在资源受限的环境中部署具有挑战性。…

汽车软件开发常用的需求管理工具汇总

目录 往期推荐 DOORS&#xff08;IBM &#xff09; 行业应用企业&#xff1a; 应用背景&#xff1a; 主要特点&#xff1a; Polarion ALM&#xff08;Siemens&#xff09; 行业应用企业&#xff1a; 应用背景&#xff1a; 主要特点&#xff1a; Codebeamer ALM&#x…

爬虫工程师杂活工具人

30岁的年龄;这个年龄大家都是成年人;都是做父母的年龄了;你再工位上的心态会发生很大变化的; 爬虫工程师基本都是如此;社会最low的一帮连销售都做不了的;单子都开不出来的然后转行做爬虫工程师的;这样的人基本不太和社会接触; 你作为爬虫初级工程师就敲着键盘然后解析着html;…

如何使用Tomcat

1 简介 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定&#xff0c;而且免费&#xff0c;成为目前比较流行的Web 应…

【AI工具】FastGPT:开启高效智能问答新征程

前言 在人工智能飞速发展的当下&#xff0c;各类 AI 工具如雨后春笋般涌现。FastGPT 作为一款基于大语言模型&#xff08;LLM&#xff09;的知识图谱问答系统&#xff0c;凭借其强大的数据处理和模型调校能力&#xff0c;为用户带来了便捷的使用体验。今天&#xff0c;就让我们…

14. git remote

基本概述 git remote 的作用是&#xff1a;查看、添加、修改和删除与本地仓库关联的远程仓库。 基本用法 1.查看远程仓库 git remote # 显示所有关联的远程仓库&#xff08;名称&#xff09; git remote -v # 显示所有关联的远程仓库&a…

【spark-submit】--提交任务

Spark-submit spark-submit 是 Apache Spark 提供的用于提交 Spark 应用程序到集群的命令行工具。 基本语法 spark-submit [options] <app-jar> [app-arguments]常用参数说明 应用程序配置 --class <class-name>: 指定应用程序的主类&#xff08;对于 Java/Sc…

2025.4.10总结

今日记录&#xff1a;今天提了两个问题单&#xff0c;最近要关注一下产出了&#xff0c;上半年的考核如今还剩两个月了&#xff0c;然后发现一同入职的同事&#xff0c;有的人进步得很快&#xff0c;得向优秀得同事看齐了&#xff0c;不然几年过去&#xff0c;别人连升好几年&a…

SvelteKit 最新中文文档教程(18)—— 浅层路由和 Packaging

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …

Winform入门进阶企业级开发示例:http接口数据清洗转换、断线续传、mqtt数据传输实例详解(附代码资源下载)

场景 C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享: C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享_winform 强化学习-CSDN博客 如何将以上相关理论知识学以致用。下面针对Winform…

Python代码缩进统一规范

一、Python缩进的重要性:逻辑与可读性的桥梁 1. 语法规则的核心 Python与其他编程语言显著不同之处在于,它使用缩进来表示代码块的层次结构。不像C、Java等语言依靠大括号{}来明确函数体、循环体和条件语句的范围,Python完全依赖缩进来界定这些逻辑单元。例如,在一个if条…

asp.net core 项目发布到 IIS 服务器

目录 一、VS2022 发布 二、设置IIS服务 三、配置IIS管理器 &#xff08;一&#xff09;打开IIS管理器 &#xff08;二&#xff09;添加站台 &#xff08;三&#xff09;配置应用程式集区 四、安装ASP.NET Core Hosting Bundle 五、设定IIS的日志位置 六、测试 一、VS2…

spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解

RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping&#xff08;隐式&#xff09;定义全局控制器增强类&#xff0c;处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…

CVE-2025-29927 Next.js 中间件鉴权绕过漏洞

Next.js Next.js 是一个基于 React 的现代 Web 开发框架&#xff0c;用来构建高性能、可扩展的 Web 应用和网站。 CVE-2025-29927 Next.js 中间件鉴权绕过漏洞 CVE-2025-29927是Next.js框架中的一个授权绕过漏洞&#xff0c;允许攻击者通过特制的HTTP请求绕过在中间件中执行…

WP最主题专业的wordpress主题开发

WP最主题&#xff08;wpzui.com&#xff09; WP最主题是一个提供高品质WordPress主题的平台。它注重主题的设计和功能&#xff0c;旨在为用户提供美观且实用的主题选择。其主题通常具有良好的用户体验、丰富的自定义选项以及优化的性能&#xff0c;能够满足不同类型的网站搭建…

玩转代理 IP :实战爬虫案例

在现代互联网环境下&#xff0c;爬虫不仅是数据获取的利器&#xff0c;也成为应对网站反爬机制的技术博弈。而在这场博弈中&#xff0c;"代理 IP" 是核心武器之一。本文将以高匿名的代理ip为核心&#xff0c;结合 Python 实战、代理策略设计、高匿技巧与反封锁优化&a…