首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 将M分成N个正整数的和 [已结贴,结贴人:baiqukqdp]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 23:04:29 楼主
    将M分成N个正整数的和,并且N个正整数各不相同
    void BD(int i,int m,int n)
    {
    for(i;i <=m/2;i++)
    {
    if(i==m-i)
    continue;
    printf("%d+",i);
    if(n-1>1)
    BD(i+1,m-i,n-1);
    else
    printf("%d=\n",m-i);
    }
    }
    这是我乱乱的代码,请大侠帮忙
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 08:51:461楼 得分:2
    两种情况
    1、m <n*(n+1)/2
    2、m>=n*(n+1)/2

    第1种情况,则无解;
    现在看第2种情况,必有解;其解为有限集{1,2,3,..n-1,n+(m-n*(n+1)/2)}

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 09:29:082楼 得分:18
    C/C++ code
    #include <iostream> using namespace std; void __m_Partition( int n, int m ){ if( n<m ) return ; if( m==1 ){ cout<<n<<endl; return ; } int *List=new int[m+1], t, s, j; List[0]=n-m+1; List[m]=-1; for( j=1; j<m; ++j ) List[j]=1; while( 1 ){ for( j=0; j<m; ++j ) cout<<List[j]+m-j-1<<" "; cout<<endl; if( List[1]<List[0]-1 ) --List[0], ++List[1]; else{ j=2; s=List[0]+List[1]-1; while( List[j]>=List[0]-1 ) s+=List[j], ++j; if( j==m ) return ; ++List[j]; t=List[j--]; while( j>0 ) List[j--]=t, s-=t; List[0]=s; } } delete []List; } void m_Partition( int n, int m ){ n-=m*(m-1)/2; __m_Partition( n, m ); } int main() { m_Partition( 36, 5 ); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 12:44:073楼 得分:0
    结果是对的,但是我要好好地看看才能明白
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved