半数集问题 (非递归递归版本)

news/2024/10/20 20:32:47/

什么是半数集?

给定一个自然数n给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下。

  1. n∈set(n);
  2. 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
  3. 按此规则进行处理,直到不能再添加自然数为止。

例如,set(6)={6,16,26,126,36,136}。半数集set(6)中有6个元素。

思路: 运用队列存储待处理(添加数字)的元素, 需要判断数字位数以调整判断的数字, 输出半数集的数量以及具体的半数集元素

非递归的代码

#include <iostream>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;int checkDigit(int number){if(number == 0) return 1;int count = 0;// 使用循环除以 10 的幂,直到数字变为 0while (number > 0) {number /= 10;count++;}return count;
}vector<int> HalfSet(int n) {vector<int> result;queue<int> queue;result.clear(); // 清空下缓存, 去除垃圾值result.push_back(n);queue.push(n);
//   int level = 0;while (!queue.empty()) {int current = queue.front(); // 取出队列头元素int current_level = checkDigit(current); // 元素位数int index = current / pow(10, current_level-1); // 元素第一个数字queue.pop();for (int i = 1; i <= index / 2; i++) {int next = current + i * pow(10, current_level);result.push_back(next);queue.push(next);}}return result;
}int main() {int n;cin >> n;vector<int> halfSubset = HalfSet(n);cout << "n=" << n << "的半数集元素个数="<<halfSubset.size()<<endl;cout << "半数集元素是"<<endl;for (int num : halfSubset) { // 输出半数集元素cout << num << " ";}return 0;
}

递归版本 (其实这题十分适合使用递归的) 只需要修改处理的函数即可, 返回半数集数量

int HalfSet2(int n){ // 返回半数集数量int sum = 1; // 自身也算是半数集的一个if(n <= 1) return 1;for(int i = 1; i <= n/2; i++){sum += set(n/2);}return sum;
}

该递归写法 可以用一数组存储其中的值以减少重复值的出现达到优化的效果

欢迎如果有大佬们看出有问题, 在评论区或是私聊我批评指正。谢谢!


http://www.ppmy.cn/news/1192863.html

相关文章

NOIP2023模拟9联测30 B. 华二

NOIP2023模拟9联测30 B. 华二 文章目录 NOIP2023模拟9联测30 B. 华二题目大意思路code 题目大意 有一个数列 A ( a 1 , ⋯ , a n ) A (a_1 ,\cdots ,a_n) A(a1​,⋯,an​) &#xff0c;其中 1 ≤ a i ≤ 9 1\le a_i \le 9 1≤ai​≤9 。对于其中相邻的两项 a i , a i 1 …

python二进制文件转nc(以PIOMAS海冰厚度数据为例)

一、数据下载 数据网址Polar Science Center PIOMAS Variables on Model Grid (uw.edu) 以其中的海冰厚度数据为例进行转化 点击下载需要的年份&#xff1a; 首先要明白&#xff0c;二进制文件是4个字节按顺序依次存储所有数据&#xff0c;因此heff.H1979是没有记录对应的地…

Swagger + DOCWAY 一步导出为优雅完整的Markdown、Pdf接口文档

只要开发&#xff0c;只要写接口应该没人不知道Swagger&#xff0c;但DOCWAY可能知道的人不多&#xff0c;但知道用过后就离不开了&#xff0c;不管是作为多方联调的接口文档&#xff0c;还是交接给客户的文档&#xff0c;都是可以的&#xff0c;具体如何使用&#xff0c;详细步…

RK3588之ArmSoM-W3 + MPP实现多路硬解码拉流

简介 学习完MPP的解码Demo之后&#xff0c;想必大家都想通过一个项目来进行RK3588-MPP的解码实战。本篇文章就基于ArmSoM-W3开发板&#xff0c;开发一个多路硬解码项目&#xff0c;实现四路MPP硬解码拉流显示实现的效果如下&#xff1a; RK3588四路MPP硬解码拉流 环境介绍 硬件…

Hadoop RPC简介

数新网络-让每个人享受数据的价值https://www.datacyber.com/ 前 言 RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用协议&#xff0c;一种通过网络从远程计算机上请求服务&#xff0c;而不需要了解底层网络技术的协议。RPC它假定某些协议的存在&#xff0c;例…

优化改进YOLOv5算法之添加MS-Block模块,有效提升目标检测效果(超详细)

目录 前言 1 MS-Block原理 1.1 Multi-Scale Building Block Design 1.2 Heterogeneous Kernel Selection Protocol 2 YOLOv5算法中加入MS-Block

科技云报道:大模型会给操作系统带来什么样的想象?

科技云报道原创。 在人工智能的发展历程中&#xff0c;大模型的出现标志着一个里程碑。 特别是近年来&#xff0c;诸如GPT-4、BERT等大模型的出现&#xff0c;不仅在自然语言处理、图像识别等领域取得了令人瞩目的成就&#xff0c;还推动了人工智能技术向更广泛的应用场景拓展…

oracle中关于connect by的语法及实现(前序遍历树)

语法 connect by是是结构化查询中用到的&#xff0c;其基本语法是&#xff1a; 1 select … from tablename 2 start with 条件1 3 connect by 条件2 4 where 条件3; 使用示例 例&#xff1a; create table tree(id int,parentid int); insert into tree values(120,184); …