首页 > 其他分享 >整数分解方法——腾讯2017春招真题

整数分解方法——腾讯2017春招真题

时间:2023-09-04 20:45:42浏览次数:33  
标签:arr num num1 真题 int 分解 春招 2017 结尾

如下示例:

1:共0种分解方法;

2:共0种分解方法;

3:3=2+1 共1种分解方法;

4:4=3+1=2+1+1 共2种分解方法;

5:5=4+1=3+2=3+1+1=2+2+1=2+1+1+1 共5种分解方法

6:6=5+1=4+2=4+1+1=3+2+1=3+1+1+1=2+2+1+1=2+1+1+1+1 共7种分解方法

以此类推,求一任意整数num有几种分解方法?

思路:

  • 对于数num,按照分解情况的结尾数字考虑:以1结尾,以2结尾,...,以floor((num - 1) / 2)结尾,每种结尾都先进行一次分解(以7为例,以1结尾时分解成6+1,以2结尾分解成5+2,以3结尾分解成4+3)
  • 对于第一次分解出的两个数(num1,num2),进一步分解num1,且只在num1 > 2*num2 时分解num1(否则无法保证降序,例:5=3+2,3继续分解出2+1,则5=2+1+2不是降序)
  • 若num1是偶数,计算分解情况时+1(例:5=4+1,进一步分解4时,要考虑4=2+2)
  • 保证num1进一步分解的结尾的数>=num2(例:7=5+2,进一步分解5时,只能将5分解成3+2,若分解成任意以1结尾的情况,如4+1,则7=4+1+2不是降序)
  • 因此,我们运用动态规划的方法,从3开始往大数分析,构造二维数组arr[i][j],arr[i][j]表示分解结尾数为j+1(下标从0开始)时的分解种数,即将第i+1行所有列相加即为num=i+1时的分解方法总数

C++   AC code:

 1 #include <iostream>
 2 #include <vector>
 3 #include <cmath>
 4 
 5 using namespace std;
 6 
 7 int main() {
 8     int num;
 9     while (cin >> num) {
10         int result = 0;
11 
12         vector<vector<int>> arr(num + 1, vector<int>());//二维容器,第一维长度num+1,第二维长度不定
13 
14         for (int i = 3; i <= num; i++) {
15             int columnNum = (i - 1) / 2;//隐式转换
16 
17             arr[i].resize(columnNum);//定义arr[i][]第二维长度
18 
19             for (int j = 0; j < columnNum; j++) {
20                 arr[i][j] = 1;//arr[i][]数据初始化,对应思路1.
21 
22                 int num2 = j + 1;
23                 int num1 = i - num2;
24 
25                 if (num1 > 2 * num2) { //对应思路2. 只有在这种情况下才进行分解
26                     if (num1 % 2 == 0) { //对应思路3. 如果num1是偶数,则增加计数
27                         arr[i][j]++;
28                     }
29 
30                     // 计算num1的分解,对应思路4. k范围是[num2,columnNum)
31                     for (int k = j; k < arr[num1].size(); k++) {
32                         arr[i][j] += arr[num1][k];//不能从k=0开始加,否则无法保证分解结果降序,即种数计算有重复
33                     }
34                 }
35             }
36         }
37 
38         if (num == 1 || num == 2) {
39             result = 0;
40         } else {
41             for (int i = 0; i < arr[num].size(); i++) {
42                 result += arr[num][i];
43             }
44         }
45 
46         cout << result << endl; // 使用C++的cout进行输出
47     }
48 
49     return 0;
50 }

 

 

  

 

标签:arr,num,num1,真题,int,分解,春招,2017,结尾
From: https://www.cnblogs.com/daxiawan2022/p/17677089.html

相关文章

  • 网络规划设计师真题解析--交换机(一)(STP选择过程)
    下图所示是一个园区网的一部分,交换机A和B是两台接入层设备,交换机C和D组成核心层,交换机E将服务器群连接至核心层。如图所示,(2014年真题)如果采用默认的STP设置和默认的选举过程,其生成树的最终结果为(1),ABCD这时候交换机B上的一台工作站,想要访问交换机E上的服务器的路径是(2),A.B-D-E......
  • 一台机器同时运行多个Tomcat服务解决方案(2017更新)
    作者:fbysss关键字:Tomcat  如何在一台服务器上安装多个Tomcat假设有2个tomcat,分别为/usr/local/tomcat/tomcat-app1/usr/local/tomcat/tomcat-app2以第一个为例:1.修改环境变量sudovi/etc/profile添加export CATALINA_HOME_APP1=/usr/local/......
  • freeswitch 在visualstudio 2017 中编译运行
    1、visualstudio使用2017版本的2、下载 https://github.com/PerkinsZhu/freeswitch/tree/v1.8 源码   错误处理:一、 下载地址:https://wixtoolset.gallerycdn.vsassets.io/extensions/wixtoolset/wixtoolsetvisualstudio2017extension/1.0.0.22/1668223938167/......
  • [THUSCH2017] 大魔法师 卡题记录
    题目:fzqoj-luogu前情提示: 此题极度卡常!!!,否则你就会像我这个蒟蒻一样卡题\(3h\):死亡记录前置知识:  1.线段树的区间修改,不会的可以点这-基础:进阶  2.基本的矩阵乘法:Fibonacci题解部分对于题目给出的6种操作,我们可以用线段树与矩阵乘法来维护思路维护一个四......
  • 每日一练 | 华为认证真题练习Day104
    1、下面关于免费ARP报文的作用描述错误的是()。A.在VRRP备份组中用来通告主备发生变换B.用于通告一个新的现AC地址:发送方更换网卡,AC地址发生改变,为了能够在AP表项老化前通告所有主机,发送方可以发送一个免费ARPC.用于检查重复的IP地址:正常情况下不会收到ARP回应,如果收到,则表明本网......
  • 面对新领域,做真题应优先于学习书本知识,二者应同时进行
    面对全新的领域,做真题和概览考试用书同时进行或前者优于后者开始,一方面可以熟悉考点,通过错题了解知识点往往能留下更深刻的印象;另一方面,通过题目和答案提炼考点和知识关键字,熟悉考题呈现方式,对于看书抓住可能的出题点有一定帮助(这对于选择题型较为适用)。简单来讲,当你熟悉如何......
  • NOIP2017提高组初赛易错题解析
     8.由四个不同的点构成的简单无向连通图的个数是()A.32 B.35 C.38 D.41错误原因:数重了正解:分情况计算,6条边的有1种,5条边的有C(6,1)=6种,4条边的有C(6,4)=15种,3条边,要分度数,2+2+1+1的有12种,3+1+1+1的有4种,共38种 10.若 f0​=0,f1​=1,fn+1​=(fn​+fn−1)/2​​,则随着......
  • P7424 [THUPC2017] 天天爱射击
    传送门我们发现,考虑每个子弹击碎哪些木板是不现实的,所以我们要转换问题:考虑每个木板被哪个子弹击碎考虑可持久化线段树,转换问题成求区间\(l\simr\)的第s早发射的子弹,模板题上代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constllN=2e5+50,M=2e5......
  • 网络规划设计师真题解析--IP地址(二)
    地址202.118.37.192/26是(25),地址192.117.17.255/22是(26)。(2018年真题)(25)A.网络地址B.组播地址C.主机地址D.定向广播地址(26)A.网络地址B.组播地址C.主机地址D.定向广播地址答案:(25)A(26)C解析:(25)202.118.37.192/26,建网比特数为/26,前三字节为24位,光看最后一字节192......
  • 每日一练 | 华为认证真题练习Day103
    1、网络设备发送的IPv6报文时,会首先将报文长度和NTU值进行对比,如果大于MTU值,则直接丢弃。A.对B.错2、路由器接口输出信息如下,则此接口可以接收哪些组播地址的数据?(多选)A.FF02::2B.FF02::1:FF12:1C.FF02::1:FF6F:4F36D.FF02::13、以下关于IPv6任播地址说法正确的有?(多选)A.目标......