2-2基础算法-递归/进制转换

文章目录

  • 一.递归
  • 二.进制转换

一.递归

1.数的计算
在这里插入图片描述
评测系统

#include <iostream>
int countCombinations(int n) { //计算当然组合种数if (n == 1) {return 1;}int count = 1;//数字本身就是一个有效组合for (int i = 1; i <= n / 2; i++) {count += countCombinations(i);//自身+当前数所产生的组合种数}return count;
}
using namespace std;
int main()
{int n;cin >> n;cout<<countCombinations(n);
}

2.计算函数值
在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
int s(int x) {if (x == 0)return 1;else if (x % 2 == 0) {return s(x / 2);}else {return s(x - 1) + 1;}
}
int main() {int x;cin >> x;cout << s(x);
}

3.约瑟夫环

在这里插入图片描述

评测系统

#include <iostream>
using namespace std;
int f(int n,int k){if(n==1)return 1;elsereturn (f(n-1,k)+k-1)%n+1;
}
int main()
{int n,k;cin>>n>>k;cout<<f(n,k);return 0;
}

4.金额查错
在这里插入图片描述
在这里插入图片描述
评测系统

解析:假设错误的总金额是 100 元,而明细账目清单上的金额总和是 120 元,那么可能遗漏的金额组合应该总和为 20 元,因为 120 - 100 = 20。题目要求找出所有可能的组合,使得这些组合的金额总和为 20 元。

第一次:count作为金额求和的结果,寻找可行的子串

#include <iostream>
#include <vector>
using namespace std;
void f(int i, int sum, int count, vector<int>& a, vector<int>& subset, vector<vector<int>>& result) {if (sum == count) {result.push_back(subset);return;}if (i == a.size() || sum > count) {return;}subset.push_back(a[i]);f(i + 1, sum + a[i], count, a, subset, result);//包含当前元素subset.pop_back();//不包含当前元素f(i + 1, sum, count, a, subset, result);
}
int main()
{int total,n;cin >> total>> n;vector<int> a(n);int sum = 0;for (int i = 0; i < n; i++) {cin >> a[i];sum += a[i];}int count=sum - total;vector<vector<int>> result;//存放最终结果vector<int> subset;//寻找满足条件的子集f(0, 0, count, a, subset, result);for (const auto& x : result) {for (int x2 : x) {cout << x2 << " ";}cout << endl;}
}

再考虑次序和去重问题,得到最终代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void f(int i, int sum, int count, vector<int>& a, vector<int>& subset, vector<vector<int>>& result) {if (sum == count) {result.push_back(subset);return;}if (i == a.size() || sum > count) {return;}for (int j = i; j < a.size(); ++j) {if (j > i && a[j] == a[j - 1])continue;subset.push_back(a[j]);f(j + 1, sum + a[j], count, a, subset, result);subset.pop_back();}
}
int main()
{int total,n;cin >> total>> n;vector<int> a(n);int sum = 0;for (int i = 0; i < n; i++) {cin >> a[i];sum += a[i];}sort(a.begin(), a.end());//排序int count=sum - total;vector<vector<int>> result;//存放最终结果vector<int> subset;//寻找满足条件的子集f(0, 0, count, a, subset, result);for (const auto& x : result) {for (int x2 : x) {cout << x2 << " ";}cout << endl;}
}

二.进制转换

1.任意进制转十进制:x=xk+a

如十六转十

在这里插入图片描述

在这里插入图片描述
评测系统

#include <iostream>
using namespace std;
int main()
{string s = "2021ABCD";int a[100];//存放十六进制的每个数for (int i = 0; i < s.length(); i++) { //调整十六进制数if (s[i] >= '0' && s[i] <= '9') {a[i] = s[i]-'0';}else {a[i] = 10+s[i] - 'A';}}int x=0;//输出的十进制数for (int i = 0; i < s.length(); i++) { //【转换代码】x = x * 16 + a[i];}cout << x;
}

2.十进制转任意进制:通过数组a输出

while(x){a[cnt++]=x%k;x=x/k;
}
reverse(a,a+cnt);

在这里插入图片描述
评测系统

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{int T;cin >> T;while (T--) {int N, M;cin >> N >> M;string s;cin >> s;long long int a[100];//【先转成十进制】for (int i = 0; i < s.length(); i++) {if (s[i] >= '0' && s[i] <= '9') {a[i] = s[i] - '0';}else {a[i] = 10 + s[i] - 'A';}}long long int x = 0;//输出的十进制数for (int i = 0; i < s.length(); i++) {x = x * N + a[i];}if (M == 10) {cout << x << endl;}else { //【十进制转M进制】string b[100];int cnt = 0;while (x) {if (x % M >= 10) {b[cnt++] = x % M - 10 + 'A';}elseb[cnt++] = to_string(x % M);x = x / M;}reverse(b, b + cnt);//翻转//输出for (int i = 0; i < cnt; i++) {cout << b[i];}cout << endl;}}
}

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

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

相关文章

【51单片机系列】proteus中创建16x16LED点阵

本文参考来源&#xff1a; Proteus8.6中16x16LED点阵制作教程【Proteus】16乘16点阵滚动播放 文章目录 一、测试proteus中的8x8点阵驱动方式1.1 测试电流通过方向1.2 测试行列控制接口 二、使用proteus中的8x8点阵制作16x16LED点阵三、测试制作的16x16LED点阵四、使用自制的16x…

【Hive】

一、Hive是什么 Hive是一款建立在Hadoop之上的开源数据仓库系统&#xff0c;将Hadoop文件中的结构化、半结构化数据文件映射成一张数据库表&#xff0c;同时提供了一种类SQL语言&#xff08;HQL&#xff09;&#xff0c;用于访问和分析存在Hadoop中的大型数据集。Hive的核心是将…

Collecting Application Engine Performance Data 收集应用程序引擎性能数据

You can collect performance data of any specific SQL action of an Application Engine program to address any performance issue. 您可以收集应用程序引擎程序的任何特定SQL操作的性能数据&#xff0c;以解决任何性能问题。 You can collect performance data of the S…

【虹科分享】基于Redis Enterprise,LangChain,OpenAI 构建一个电子商务聊天机器人

如何构建你自己的商务聊天机器人&#xff1f;注意哦&#xff0c;是你自己的聊天机器人。一起来看看Redis Enterprise的向量检索是怎么帮你实现这个愿望的吧。 鉴于最近人工智能支持的API和网络开发工具的激增&#xff0c;似乎每个人都在将聊天机器人集成到他们的应用程序中。 …

原生cesium、mars3d、supermap-cesium在vue3+vite中引入

1. 原生cesium 需要下载 yarn add cesiumyarn add vite-plugin-cesium2. mars3d 需要下载 yarn add mars3d mars3d-cesiumyarn add vite-plugin-mars3d3. supermap-cesium 只需要引入官网下载的包&#xff0c;build文件夹下的cesium&#xff0c;以及项目中引入的其他cesiu…

【深度学习】PHP操作mysql数据库总结

一.PHP数据库的扩展分类 1.MySQL 扩展是针对 MySQL 4.1.3 或更早版本设计的&#xff0c;是 PHP 与 MySQL数据库交互的早期扩展。由于其不支持 MySQL 数据库服务器的新特性&#xff0c;且安全性差&#xff0c;在项目开发中不建议使用&#xff0c;可用 MySQLi 扩展代替。 2.MySQ…

Android BottomSheetBehavior(底部弹窗)

目录 一、BottomSheetBehavior 介绍 二、BottomSheetBehavior 基本使用 2.1 在 CoordinatorLayout 中添加底部工作表&#xff1a; 2.2 在代码中获取 BottomSheetBehavior 实例&#xff1a; 2.3 设置工作表的状态&#xff0c;如展开、折叠等 2.4 工作表的状态 三、Bottom…

嵌入式系统未来的发展趋势走向???

人工智能和机器学习应用 模型优化&#xff1a; 为了在资源有限的嵌入式系统上运行&#xff0c;将会看到更多的努力投入到精简、优化和量化模型&#xff0c;以适应边缘计算的环境。 边缘推理&#xff1a; 嵌入式设备将更多地执行本地推理&#xff0c;而不是将所有数据发送到云端…

【设计模式--行为型--命令模式】

设计模式--行为型--命令模式 命令模式定义结构案例优缺点使用场景 命令模式 定义 将一个请求封装为一个对象&#xff0c;使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通&#xff0c;这样方便将命令对象进行存储&#xff0c;传递&#xff0c;调用…

城轨线路列车时刻表与车站客流控制协同优化方法

文章信息 论文题目为《城轨线路列车时刻表与车站客流控制协同优化方法》&#xff0c;该文于2021年发表于《交通运输系统工程与信息》上。文章考虑换入客流影响下列车时刻表与客流控制的协同优化问题&#xff0c;以最小化乘车延误人数为目标&#xff0c;以列车时刻表、客流控制和…

java代码编写twitter授权登录

在上一篇内容已经介绍了怎么申请twitter开放的API接口。 下面介绍怎么通过twitter提供的API&#xff0c;进行授权登录功能。 开发者页面设置 首先在开发者页面开启“用户认证设置”&#xff0c;点击edit进行信息编辑。 我的授权登录是个网页&#xff0c;并且只需要进行简单的…

动物姿态估计:微调 YOLOv8 姿态模型

动物姿态估计是计算机视觉的一个研究领域&#xff0c;是人工智能的一个子领域&#xff0c;专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一种或多种动物的身体部位&#xff08;例如头部、四肢和尾巴&#xff09;的空间排列。这项技术具有广泛的应用&#…

uniapp 单选按钮 选中默认设备

需求1&#xff1a;选中默认设备&#xff0c;113 和114 和139都可以选中一个默认设备 选中多个默认设备方法&#xff1a; async toSwitch(typeItem, title) {const res await this.setDefaultDev(typeItem.ibdr_devsn, typeItem.ibdr_pid)if (!res) {this.common.toast(切换默…

关于在Java中打印三角形图形的汇总

前面写过一些关于打印三角形图形代码的文章&#xff0c;这里进行了汇总&#xff0c;话不多说&#xff0c;直接上代码&#xff1a; /*** 关于打印三角形的汇总*/ public class Work1 {public static void main(String[] args) {int num 5;/** 打印如下图形&#xff1a;* ** …

OPCServer KEPServer安装和使用

OPCServer KEPServer安装和使用 简介 KEPServer软件是免费的&#xff0c;驱动收费&#xff0c;每天2小时试用时间, 免费用来模拟仿真是很不错的选择 OPC DA 和OPC UA都支持 中文官网地址: https://www.kepware.com/zh-cn/ 中文官方文档&#xff08;经常有更新&#xff0c;其…

分库分表及ShardingShpere-proxy数据分片

为什么需要分库&#xff1f; 随着数据量的急速上升&#xff0c;单个数据库可能会QPS过高导致读写耗时过长而出现性能瓶颈&#xff0c;所以需要考虑拆分数据库&#xff0c;将数据库分布在不同实例上提升数据库可用性。主要的原因有如下&#xff1a; 磁盘存储。业务量剧增&…

javaWebssh汽车销售管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh汽车销售管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…

redis-学习笔记(Jedis zset 简单命令)

zadd & zrange zadd , 插入的第一个参数是 zset , 第二个参数是 score, 第三个参数是 member 成员 内部依据 score 排序 zrange 返回 key 对应的 对应区间内的值 zrangeWithScore 返回 key 对应的 对应区间内的值和分数 示例代码 zcard 返回 key 对应的 zset 的长度 示例代…

05-命令模式

意图&#xff08;GOF定义&#xff09; 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户端进行参数化&#xff0c;对请求排队或者记录日志&#xff0c;以及可支持撤销的操作。 理解 命令模式就是把一些常用的但比较繁杂的工作归类为成一组一组的动作&…

Linux环境下maven的安装

到官网下载maven 步入下面的地址选择合适的maven版本 https://dlcdn.apache.org/maven/ 以笔者为例&#xff0c;选择了3.5.4这个版本 将maven上传到Linux服务器并解压 tar -zxvf apache-maven-3.5.4-bin.tar.gz配置环境变量 我们使用vim编辑profile vim /etc/profile环境…