用c++实现旋转的万花筒、整数划分

4.3.2 旋转的万花筒


【问题】 万花简的初始形状如图4-4(a)所示,其中的圆圈代表万花简的闪烁点,每旋转一次万花简形状就演变一次,演变的规则是在末端再生出同样的形状,如图4-4(b)和图4-4(c)所示,求第n次旋转后有多少个闪烁点?

【想法】 仔细观察万花简的演变过程,初始时有4个闪烁点,第1次旋转在初始闪烁点的基础上,每个分支端点又多了2个闪烁点。设Sn表示第n次旋转的闪烁点个数,每次旋转都是在上一次旋转的每个分支端点又多了2个闪烁点,初始时有3个分支端点,第1次旋转有3×2个分支端点,每次旋转分支端点都会翻倍,得到如下递推关系式:

【算法实现】 设函数Kale实现旋转的万花筒,变量lamps 表示上一次旋转后的闪烁点,变量 addLamp 表示当次旋转闪烁点的增量,程序如下。

#include <iostream>
using namespace std;


int Kale(int n)
{
int i, lamps = 4, addLamp = 3;
for (i = 1; i <= n; i++)
{
addLamp *= 2;
lamps += addLamp;
}
return lamps;
}
int main( )
{
int n;
cout<<"请输入旋转次数:";
cin>>n;
cout<<"第"<<n<<"次闪烁点为"<<Kale(n)<<endl;
 return 0;
}

【算法分析】 显然,算法Kale的时间复杂度为O(n)。


4.4.1 整数划分


【问题】 对于一个大于2的整数n,要求仅使用2的若干次幂的整数集合进行划分,使得集合中所有整数之和等于n,问可以有多少种划分?

【想法】列出一些整数的划分,寻找递推关系式:

2:(1, 1),(2)(2种)
3:(1, 1, 1),(1,2)(2种)
4:(1, 1, 1, 1),(1, 1, 2),(2, 2),(4)(4种)
5:(1, 1, 1.1, 1),(1, 1, 1, 2),(1, 2, 2),(1, 4)(4种)
6:(1,1, 1,1, 1,1), (1,1,1,1,2),(1,1,2,2),(1,1,4),(2, 2,2),(2,4)(6种)
7.(1,1,1,1,1,1,1),(1,1, 1,1,1,2),(1,1,1,2,2),(1,1,1,4),(1,2, 2,2),(1, 2,4)(6种)
令d,表示对整数n进行2的幂次划分的集合个数,观察上述划分实例,当n为奇数时,只需在整数n-1划分集合的每一个集合加上1;当n为偶数时,在整数n-1划分集合中的每一个集合加上1,得到最小数为1的所有划分,再将整数n/2划分集合的每一个集合中的元素翻倍,得到所有元素均为偶数的所有划分。因此有如下递推关系式:



【算法实现】 设函数 Devide 实现集合划分,数组 d[n+1]表示对整数n进行2的幂次划分的集合数,程序如下,

#include <iostream>
using namespace std;

int Devide(int n)
{
int i, d[n+1] = {0};
d[1] = 1; d[2] = 2;
for (i = 3; i <= n; i++)
if (i % 2 != 0) d[i] = d[i-1];
else d[i] = d[i-1] + d[i/2];
return d[n];
}

int main( )
{
 int n;
    cout << "请输入一个整数:";
    cin >> n;

    int result = Devide(n);

    // 输出划分的结果
    cout << "对 " << n << " 进行划分的结果为:" << result << endl;

    return 0;
}


 



 

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

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

相关文章

【热门话题】WebKit架构简介

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 WebKit架构简介一、引言二、WebKit概览1. 起源与发展2. 模块化设计 三、WebCore…

CentOS 7 下离线安装RabbitMQ教程

CentOS 7 下安装RabbitMQ教程一、做准备&#xff08;VMWare 虚拟机上的 CentOS 7 镜像 上安装的&#xff09; &#xff08;1&#xff09;准备RabbitMQ的安装包&#xff08;rabbitmq-server-3.8.5-1.el7.noarch&#xff09;下载地址mq https://github.com/rabbitmq/rabbitmq-se…

day02-SpringCloud02(Nacos、Feign、Gateway)

1.Nacos 配置管理 Nacos 除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案&#x…

解读命令:icacls “E:\ShareAll“ /grant “Everyone:(OI)(CI)(F)“

命令 icacls "E:\ShareAll" /grant "Everyone:(OI)(CI)(F)" 是在Windows操作系统中用来修改文件或目录权限的命令行操作。该命令执行以下操作&#xff1a; 路径&#xff1a;"E:\ShareAll" 指定了要更改权限的目录位置&#xff0c;即对E盘下的“S…

稀碎从零算法笔记Day37-LeetCode:所有可能的真二叉树

今天的每日一题&#xff0c;感觉理解的还不够深&#xff0c;有待加深理解 题型&#xff1a;树、分治、递归 链接&#xff1a;894. 所有可能的真二叉树 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给你一个整数 n &#xff0c;请你找出所有…

uniapp:小程序腾讯地图程序文件qqmap-wx-jssdk.js 文件一直找不到无法导入

先看问题&#xff1a; 在使用腾讯地图api时无法导入到qqmap-wx-jssdk.js文件 解决方法&#xff1a;1、打开qqmap-wx-jssdk.js最后一行 然后导入&#xff1a;这里是我的路径位置&#xff0c;可以根据自己的路径位置进行更改导入 最后在生命周期函数中输出&#xff1a; 运行效果…

【串——数据结构】

串 定义串&#xff0c;即字符串(String)是由零个或多个字符组成的有限序列. 术语&#xff1a;串长、空串、空格串、子串、主串、字符在主串中的位置、子串在主串中的位置 串的定义和性质&#xff1a;了解串的基本定义&#xff0c;包括如何表示、如何存储、如何操作串以及串的基…

如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案

问题描述&#xff1a; 自己的移动机器人在为激光雷达和IMU配置动态指定的端口时&#xff0c;发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同&#xff0c;但是两个设备都具有不同的ttyUSB号&#xff0c;如下图所示 idVendor&#xff1a;代表着设备的生产商ID,由USB设…

EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格

xls文件&#xff1a; 后端代码&#xff1a; InputStream filePath this.getClass().getClassLoader().getResourceAsStream(templateFile);// 根据模板文件生成目标文件ExcelWriter excelWriter EasyExcel.write(orgInfo.getFilename()).excelType(ExcelTypeEnum.XLS).withTe…

App测试中ios和Android的区别

1、Android长按home键呼出应用列表和切换应用&#xff0c;然后右滑则终止应用&#xff1b; 2、多分辨率测试&#xff0c;Android端20多种&#xff0c;ios较少&#xff1b; 3、手机操作系统&#xff0c;Android较多&#xff0c;ios较少且不能降级&#xff0c;只能单向升级&…

论文笔记 - :DIGGING INTO OUTPUT REPRESENTATION FOR MONOCULAR 3D OBJECT DETECTION

Title: 深入研究单目 3D 物体检测的输出表示 Abstract 单目 3D 对象检测旨在从单个图像中识别和定位 3D 空间中的对象。最近的研究取得了显着的进展&#xff0c;而所有这些研究都遵循基于 LiDAR 的 3D 检测中的典型输出表示。 然而&#xff0c;在本文中&#xff0c;我们认为…

javaweb学习(day11-监听器Listener过滤器Filter)

一、监听器Listener 1 Listener介绍 Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是&#xff1a;Servlet 程 序、Listener 监听器、Filter 过滤器 Listener 是 JavaEE 的规范&#xff0c;就是接口 监听器的作用是&#xff0c;监听某种变化(一般就是对…