整数拆分 C++

【C++题解】[CSP-J2020]优秀的拆分 请大家再回忆一个小学学过的知识点:奇数+奇数=偶数,偶数+偶数=偶数,偶数+奇数=奇数,这也就说明任何两数相加要想是奇数,都必须是“偶数+奇数”的形式,所以奇数的拆分都会存在。如果这个数的所有拆分中,存在优秀的拆分。那么,你需要从大到小输出这个拆分中的每一个数,相邻两个数之间用一个空格隔开。,你需要判断这个数的所有拆分中,是否存在优秀的拆分。的一种特定拆分,我们称它为“优秀的”,当且仅当在这种拆分下,可以证明,在规定了拆分数字的顺序后,该拆分方案是唯一的。),而想要做到“优秀的拆分”,幂得是。 阅读详情

描述

题目描述
一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。
输入描述:
每组输入包括一个整数:N(1<=N<=1000000)。
输出描述:
对于每组数据,输出f(n)%1000000000。
示例1

输入
7
输出
6

分析

显然f[1]=1 f[2]=2
当n是奇数时,只能拆成1+(n-1),而1不能再拆分,所以实际上f[n] = f[n-1]
当n为偶数时,拆分的结果中有两种情况,一种是包含1的,比如1+2+1,另一种是不包含1的,比如2+2
含有1的情况中,由于n是偶数,则必然至少含有两个1,这两个1不会再拆分,所以种类数由剩下的n-2的拆分决定,所以是f[n-2];
当不含有1时,那么拆分出的所有数都是2的倍数,也就是n = 2*(n/2),能够拆分出的种类由这n/2决定,所以是f[n/2]
所以当n为偶数时, f[n] = f[n-2] + f[n/2]

另外由于数据过大,需要边计算边取模

代码

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<cctype>
using namespace std;
const int mod = 1000000000;
const int N = 1000000;
long long f[N + 2];
int main()
{
    int n;
    f[1] = 1; f[2] = 2;
    for (int i = 3; i <= N; i++)
    {
        if (i % 2 != 0)f[i] = f[i - 1];
        else f[i] = (f[i / 2]%mod + f[i - 2]%mod)%mod;
    }
    while (cin>>n)
    {
        printf("%lld\n", f[n] % mod);
    }
}
编程实现分解整数c++ 如:N为8,可分解为(1,1,6)、(1,2,5)、(1,3,4)、(2,2,4)、(2,3,3),其中满足要求的分解方法有1种,为(1,2,5)。给定一个正整数N,然后将N分解成3个正整数之和。计算出共有多少种符合要求的分解方法。输入一个正整数N(5<N<501),表示需要分解的正整数。输出一个整数,表示共有多少种符合要求的分解方法。2)分解的3个正整数中都不是数字3和7。1)分解的3个正整数各不相同; 阅读详情

相关推荐

C++实现求一个整数的K拆分乘积最大值

#include&lt;iostream&gt;                                                                                                                                                                          using ...

qq_25220145的博客 1455

优秀的拆分C++

题目: 样例解释:思路:代码:

mwssx的博客 1051

整数划分c++代码

c++,算法题,递归 指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。

c++入门基础 数字拆分

拆数—过河拆桥式玩法 1、拆数的精髓是将一个整数拆成每一位上的数独立存在。 2、拆数的工具 % 和 /。 3、拆数的必备条件是 拆不完不让走! 4、拆数的注意事项:如果在循环内,记得找个替身。 5、拆数的意义:无意义!拆数可以用于做回文数,做数字中的关键字统计或查看。 6、拆数的详细过程如下图。 举例说明: 1、输入一个数,将该数上各个位上的数相加。 输入样例:123 输出样例:6 #include<bits/stdc++.h> using namespace std

编程小书童的博客 1万+

本体研究综述(转)

(这篇文章是从http://imarine.blog.163.com/中转载过来的,个人觉得对本体的介绍比较全面!)本体综述本体作为一种能在语义和知识层次上描述领域概念的建模工具,其目标是捕获相关领域的知识,确定该领域内共同认可的词汇,通过概念之间的关系来描述概念的语义,提供对该领域知识的共同理解。语义Web(the Semantic Web)是在本体理论基础之上对现有Web所进行的扩展[

zhenshideni611的专栏 1838

GPU运维面试题

【代码】GPU运维面试题。

u011220233的博客 700

c语言 整数拆分,C++ 整数拆分方法详解

一、问题背景整数拆分,指把一个整数分解成若干个整数的和如 3=2+1=1+1+1 共2种拆分我们认为2+1与1+2为同一种拆分二、定义在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)即 n=x1+x2+······+xk-1+xk ,任意 x≤m在此我们采用递归递推法三、递推关系1、n=1或m=1时拆分方案仅为 n=1 或 n=1+1+1+······f(n,m)=12、n=m...

weixin_28917279的博客 5879

小波变换(深入浅出)

小波变换

weixin_46713695的博客 3万+

c++ 实现整数的拆分

<br />// interDived.cpp : Defines the entry point for the console application.<br /> //Writed by Johsnon Chen 2010/10/12<br /><br /> #include "stdafx.h"<br /> #include <vector><br /> #include <iostream><br /> using namespace std;<br /> vector<int> iV

tianye0118的专栏 2294

11.Labview实现用户界面切换的几种方式---通过VI间相互调用

本文介绍了界面切换的几种方式,分别是重入和引用①重入方式可以通过调用子VI的方式打开被调用的界面,往往应用于弹窗等的设置程序。②引用方式分两种,一种是打开引用,一种是静态引用。区别在于打开引用需要设置被打开VI的目标地址,静态引用仅需在引用时绑定VI的位置即可。③推荐使用静态引用的方式切换界面。④使用引用打开界面时,需通过属性节点和调用节点来设置程序的状态。更多内容欢迎大家补充和留言讨论~本文介绍了GUI界面设计相关的程序,更多相关文章后续持续更新,请关注作者不迷路~本期就到这里,再见~

关注我,更多技术问题欢迎私聊~ 9552

Python之aaindex包语法、参数和实际应用案例

`aaindex`是一个专为生物信息学设计的Python包,主要用于处理氨基酸指数(AAindex)数据库。该数据库收集了各种氨基酸的物理化学性质和统计特性,涵盖疏水性、电荷、体积等500多种特性。`aaindex`包提供了便捷的接口,让用户能够快速访问这些数据,并应用于蛋白质序列分析、结构预测、功能推断等领域。

王国平的博客 1037

php 将数字拆分,C++_C++ 整数拆分方法详解,一、问题背景   整数拆分 - phpStudy...

C++ 整数拆分方法详解一、问题背景整数拆分,指把一个整数分解成若干个整数的和如 3=2+1=1+1+1 共2种拆分我们认为2+1与1+2为同一种拆分二、定义在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)即 n=x1+x2+······+xk-1+xk ,任意 x≤m在此我们采用递归递推法三、递推关系1、n=1或m=1时拆分方案仅为 n=1 或 n=1+1+1+······f...

weixin_32597009的博客 442

WorkBuddy 技能指南:基础办公与文档处理

WorkBuddy 不仅仅是一个对话工具——它通过技能(Skills)系统,将通用 AI 助手转变为具备专业领域能力的智能助手。每个技能都是一套经过精心设计的"能力包",包含专业知识、工作流程和专用工具。本文聚焦于文档处理类技能——这是日常工作中使用频率最高、最实用的能力集合。

u011186532的专栏 705

c语言对任意整数的拆分作用,C++ 整数拆分方法详解

一、问题背景整数拆分,指把一个整数分解成若干个整数的和如 3=2+1=1+1+1 共2种拆分我们认为2+1与1+2为同一种拆分二、定义在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)即 n=x1+x2+······+xk-1+xk ,任意 x≤m在此我们采用递归递推法三、递推关系1、n=1或m=1时拆分方案仅为 n=1 或 n=1+1+1+······f(n,m)=12、n=m...

weixin_29832179的博客 1854

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

「汽车电子助手」的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

c语言 数字分离编程,C++ 整数拆分方法详解

一、问题背景整数拆分,指把一个整数分解成若干个整数的和如 3=2+1=1+1+1 共2种拆分我们认为2+1与1+2为同一种拆分二、定义在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)即 n=x1+x2+・・・・・・+xk-1+xk ,任意 x≤m在此我们采用递归递推法三、递推关系1、n=1或m=1时拆分方案仅为 n=1 或 n=1+1+1+・・・・・・f(n,m)=12、n=m...

weixin_28703451的博客 5507

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

整数拆分--java/C++

题目如下: 一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。 再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。 用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读...

zhang__shuang_的博客 3324

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C++】整数拆分程序框架

int n,y; cout<<"Enter the number:"; cin>>n;//n保存输入的整数 cout<<"The number in reverse order is"; while(n!=0) { y=n%10;//对n求模取出当前个位数 cout<<y; n=n/10;//即n=n/10运算,相当于对n右移一位,去掉已取出...

vichin_0215 400

递推法c语言 分离整数,C++ 整数拆分方法详解

一、问题背景整数拆分,指把一个整数分解成若干个整数的和如 3=2+1=1+1+1 共2种拆分我们认为2+1与1+2为同一种拆分二、定义在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)即 n=x1+x2+······+xk-1+xk ,任意 x≤m在此我们采用递归递推法三、递推关系1、n=1或m=1时拆分方案仅为 n=1 或 n=1+1+1+······f(n,m)=12、n=m...

weixin_32515445的博客 1176

整数拆分cpp

思路:根据数论知识,要使乘积最大化,将该数拆分成3和2即可,一直对该数进行减三操作,直到该数小于等于4即可。

2302_80145725的博客 257

【牛客KY7】整数拆分 C++

一个整数总可以拆分为2的幂的和,例如: 7=1+2+4 7=1+2+2+2 7=1+1+1+4 7=1+1+1+2+2 7=1+1+1+1+1+2 7=1+1+1+1+1+1+1 总共有六种不同的拆分方式。再比如:4可以拆分成:4 = 4,4 = 1 + 1 + 1 + 1,4 = 2 + 2,4=1+1+2。用f(n)表示n的不同拆分的种数,例如f(7)=6. 要求编写程序,读入n(不超过1000000),输出f(n)%1000000000。每组输入包括一个整数:N(1<=N<=1000000)。

m0_65154047的博客 261

leetcode343整数拆分_C++_med

给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例2: 输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。 说明: 你可以假设n不小于 2 且不大于 58。 思路描述:运用动态规划的思想。每...

annabelle1130的博客 793

整数拆分问题_C++

一、问题背景   整数拆分,指把一个整数分解成若干个整数的和   如 3=2+1=1+1+1 共2种拆分   我们认为2+1与1+2为同一种拆分 二、定义   在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 f(n,m)   即 n=x1+x2+······+xk-1+xk ,任意 x≤m   在此我们采用递归递推法 三、递推关系   1、n=1或m=1时     ...

weixin_30357231的博客 538

C++整数拆分

创建数组dp,其中 dp[i]表示将正整数﹔拆分成至少两个正整数的和之后,这些正整数的最大乘积。特别地,0不是正整数,1是最小的正整数,0和1都不能拆分,因此 dp[0] = dp[1] =0。令x是拆分出的第一个正整数则剩下的部分是n-x,n-x可以不继续拆分,或者继续拆分成至少两个正整数的和。2.将i拆分成j和i-j的和,且ij继续拆分成多个正整数,此时的乘积是jx dp[i-j]1.将拆分成j和i-j的和,且ij不再拆分成多个正整数,此时的乘积是 j×(i-j);

weixin_73646563的博客 580

动态规划算法练习——5、整数拆分(python和C++描述)

来源:代码随想录 本题的力扣链接:https://leetcode-cn.com/problems/integer-break/ 目录1、题目描述:2、思路:3、代码:3.1 python代码:3.2 C++代码:4、总结: 1、题目描述: 2、思路: 一看到题,想到的是:将这个整数从1到n-1遍历,计算j*(n-j),然后每次遍历的时候更新最大乘积,但是发现这样只能是拆分成2个数,显然不可以。 但是,要是我们能知道拆分开的两个数拆分的最大乘积,那不就得到n的结果了么。 因此,由前面的值,推.

Ma Sizhou 1107
上一篇: 【CCF2017】真题持续更新
下一篇: 手机键盘 C++
BeforeEasy
博客等级 码龄10年 92粉丝 207原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值