整数分隔

原创 2015年07月07日 17:20:02
描述:     
一个整数总可以拆分为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。

题目类别:    null 
难度:  初级 
运行时间限制: 10Sec
内存限制:   128MByte
阶段:  入职前练习 
输入:  
每组输入包括一个整数:N(1<=N<=1000000)。

输出:  
对于每组数据,输出f(n)%1000000000。

输出有多行,每行一个结果。

输入数据如果超出范围,输出-1。

样例输入:   
7

样例输出:   
6


思路:
当n=2k+1为奇数时,f(2k+1)=f(2k)。其实2k+1的拆分第一项肯定为1,若去掉这个1,就和2k的拆分一样了。

当n=2k为偶数时,我们考虑有1和没有1的拆分。若有1,则前2项均为1,就和2k-2的拆分一样了。
若没有1,则将每项除以2,就和k的拆分一样了。故有f(2k)=f(2k-2)+f(k);


#include<iostream>

using namespace std;

int f[1000001];
void main(){
	//int  f[1000000];运行结果报错。
        int n;
        cout << "input:" << endl;
	cin >> n;
	f[1] = 1;
	for (int i = 2; i <= n; i++){
		if (i % 2 == 0)
			f[i] = (f[i - 1] + f[i / 2]) % 1000000000;
		else
			f[i] = f[i - 1];
	}
	cout << "output:" << endl;
	cout << f[n] << endl;
	system("pause");

}

Second time

#include<iostream>
using namespace std;

int A[1000001];
int spilt(int n){
	//int  A[1000000]; 放这里的话运行出错
	A[1] = 1;
	for (int i = 2; i <= n; i++){
		if (i % 2 == 0)
			A[i] = (A[i - 1] + A[i / 2])%1000000000;
		else
			A[i] = A[i - 1];		
		
	}
	return A[n];
}

void main(){
	int  n;
	cout << "input:" << endl;
	cin >> n;	
	cout << "output:" << endl;
	cout <<spilt(n) << endl;
	system("pause");

}



                

[HihoCoder]#1356 : 分隔相同整数

华电北风吹 天津大学认知计算与应用重点实验室 2016-08-11题目链接: http://hihocoder.com/problemset/problem/1356题目分析: 总体思...
  • zhangzhengyi03539
  • zhangzhengyi03539
  • 2016年08月11日 20:30
  • 224

整数分隔

描述: 一个整数可以拆分为2的幂的和,例如: 7 = 1+ 2 + 4 7 = 1 + 2 + 2 + 2 7 = 1 + 1 + 1 + 4 7 = 1 + 1 + 1 + 2 + 2 ...
  • lanximu
  • lanximu
  • 2014年03月09日 22:12
  • 1097

九度OJ 题目1117:整数奇偶排序

 一.题目描述: 输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔),要求: 1.先输出其中的奇数,并按从大到小排列; 2.然后输出其中的偶数,并按从小到大排列。 输入:...
  • lhyer
  • lhyer
  • 2015年09月03日 17:25
  • 437

0102-输出第二个整数

输出第二个整数 【题目描述】 输入三个整数,整数之间由一个空格分隔,整数是32位有符号整数。把第二个输入的整数输出。 【输入】 只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。...
  • greatau
  • greatau
  • 2017年10月18日 20:07
  • 129

02:输出第二个整数

总时间限制: 1000ms 内存限制: 65536kB 描述 输入三个整数,把第二个输入的整数输出。输入 只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。 输出 只有一...
  • qq_36006682
  • qq_36006682
  • 2017年03月07日 21:51
  • 174

九度oj-1117-整数奇偶排序

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3113 解决:912 题目描述: 输入10个整数,彼此以空格分隔。重新排序以后输出(也按空格分隔...
  • u011514451
  • u011514451
  • 2015年08月16日 21:07
  • 630

【华为练习题】整数分隔

【华为练习题】整数分隔题目整数分隔描述: 一个整数总可以拆分为2的幂的和,例如:7=1+2+47=1+2+2+27=1+1+1+47=1+1+1+2+27=1+1+1+1+1+27=1+1+1+1+...
  • sps900608
  • sps900608
  • 2016年09月13日 17:06
  • 437

计蒜客 A+B+C问题

17.04.22这是一个非常简单的题目,意在考察你编程的基础能力。千万别想难了哦。输入为一行,包括了用空格分隔的三个整数 AA、BB、CC(数据范围均在-40−40 ~ 4040 之间)。输出为一行,...
  • gg4320
  • gg4320
  • 2017年04月22日 14:04
  • 432

IO-03. 求整数均值

本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。 输入格式: 输入在一行中给出4个整数,其间以空格分隔。 输出格式: 在一行中按照格式“Sum =...
  • u010399331
  • u010399331
  • 2014年07月24日 22:58
  • 1559

06:空格分隔输出

总时间限制: 1000ms 内存限制: 65536kB 描述 读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位...
  • qq_36006682
  • qq_36006682
  • 2017年03月07日 22:00
  • 1524
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数分隔
举报原因:
原因补充:

(最多只允许输入30个字)