• 全部
  • 问答

分解和数的问题

nandizhu 2008-04-03 01:55:48
对于正整数N,输出其和等于N且满足以下限制条件的所有正整数的和式,组成和式的数字自左到右构成一个非递增序列
如N=4,输出
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
...全文
175 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
nandizhu 2008-04-04
好象不能按递减序列排///
回复
nandizhu 2008-04-03
我做咩了~~~~~~
回复
medie2005 2008-04-03
我真傻,楼主竟然是...
回复
medie2005 2008-04-03
递归版本:
#include <cstdlib>
#include <iostream>

using namespace std;

int *Road;
void f( int sum, int level ){
if( sum==0 ){
for( int i=1; i<=level; ++i )
cout<<Road[i]<<" ";
cout<<endl;
return;
}
for( int j=min(sum,Road[level]); j>=1; --j ){
Road[level+1]=j;
f( sum-j, level+1 );
}
}

int main()
{
int n;
cin>>n;
Road=new int[n+1];
Road[0]=n;
f( n, 0 );
delete []Road;
system("PAUSE");
return EXIT_SUCCESS;
}
回复
medie2005 2008-04-03
当然可以.
回复
nandizhu 2008-04-03
可以用递归的方法做吗??
回复
medie2005 2008-04-03
C++版本的。
void     Partition( int n ){
int *List=new int[n+1], q=0, m=1, t, j;
List[0]=n;
while( 1 ){
copy( List, List+m, ostream_iterator<int>cout," "));cout<<endl;
if( q<0 ) return ;
if( List[q]==2 )
--List[q--], List[m++]=1;
else{
--List[q]; t=m-q;
for( j=1; j<=t/List[q]; ++j )
List[q+j]=List[q];
if( t%List[q]==0 )
m=q+j, q=m-1;
else
m=q+j+1, List[q+j]=t%List[q], List[q+j]==1? q=m-2 : q=m-1;
}
}
delete []List;
} 

回复
相关推荐
发帖
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-04-03 01:55
社区公告
暂无公告