整数分隔

原创 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");

}




            
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

csv逗号分隔值

【C#/WPF】限制GridSplitter分隔栏的滑动范围

MFC 分隔框示例程序

  • 2013-03-29 09:46
  • 27KB
  • 下载

MP3分隔合并工具

  • 2011-12-22 16:08
  • 234KB
  • 下载

Mysql导出逗号分隔的csv文件

CleverCode在时间的工作中,经常需要将一些报表,或者日志数据等导出来,如果直接做页面,如果次数也不是很多,需求也不同。所以直接导出csv文件,更加直观。 1 导出csv文件 1.1 语句格式 ...

数字分隔(二)

数字分隔(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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