整数分隔

原创 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 分隔相同整数 (贪心)

题目链接:http://hihocoder.com/problemset/problem/1356 时间限制:10000ms 单点时限:1000ms 内存限制:256MB ...

华为机试题:输入两个超长整型构成的字符串,其间使用一个空格分隔,每个字符串最大长度为100个字符。求第一个整数除以第二个整数以后的余数。。

问题描述: 输入两个超长整型构成的字符串,其间使用一个空格分隔,每个字符串最大长度为100个字符。求第一个整数除以第二个整数以后的余数。。 运行时间限制: 无限制 内存限制: 无限制 ...
  • cvMat
  • cvMat
  • 2016年09月01日 21:16
  • 889

csv逗号分隔值

  • 2013年11月20日 10:03
  • 7KB
  • 下载

js数字的货币格式表示法(每三位一个逗号分隔)

要显示如下格式的数字,即数字的金钱表示法:小数部分保留两位小数,整数部分每隔三位使用一个“,”分隔 代码如下: //保留两位小数并且整数部分三位一个逗号分隔符的数字金钱标准表示法: //这里假...

MFC 分隔框示例程序

  • 2013年03月29日 09:46
  • 27KB
  • 下载

MP3分隔合并工具

  • 2011年12月22日 16:08
  • 234KB
  • 下载

RecyclerView系列之(2):为RecyclerView添加分隔线

RecyclerView系列之(2):为RecyclerView添加分隔线 http://www.jianshu.com/p/4eff036360da http://www.jianshu.c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数分隔
举报原因:
原因补充:

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