标题:一道ACM题供大家思考。
取消只看楼主
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
结帖率:99.34%
已结贴  问题点数:50 回复次数:8 
一道ACM题供大家思考。
看了weipeng1217坛友的整数划分问题帖子,我去网上看了下,有一个ACM题和他类似,不过还详细些我写下来供大家思考。我的建议是大家先做,别去网上抄代码。各抒己码,一起比较。


整数划分问题整数划分是一个经典的问题。希望这道题会对你的组合数学的解题能力有所帮助。

Input

每组输入是两个整数n和k。(1 <= n <= 50, 1 <= k <= n)

Output

对于每组输入,请输出六行。

第一行: 将n划分成若干正整数之和的划分数。
第二行: 将n划分成k个正整数之和的划分数。
第三行: 将n划分成最大数不超过k的划分数。
第四行: 将n划分成若干奇正整数之和的划分数。
第五行: 将n划分成若干不同整数之和的划分数。
第六行: 打印一个空行。

Sample Input
5 2

Sample Output
7
2
3
3
3


Hint:
1、将5划分成若干正整数之和的划分为: 5, 4+1, 3+2, 3+1+1, 2+2+1, 2+1+1+1, 1+1+1+1+1
2、将5划分成2个正整数之和的划分为: 3+2, 4+1
3、将5划分成最大数不超过2的划分为: 1+1+1+1+1, 1+1+1+2, 1+2+2
4、将5划分成若干奇正整数之和的划分为: 5, 1+1+3, 1+1+1+1+1
5、将5划分成若干不同整数之和的划分为: 5, 1+4, 2+3

搜索更多相关主题的帖子: 经典的 正整数 能力 数学 
2012-01-14 10:28
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
两位版主写的很好(用的是递归法),还有其他的方法,大家可以继续思考。

梅尚程荀
马谭杨奚







                                                       
2012-01-15 11:28
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
是啊 还有一个星期就到龙年了

梅尚程荀
马谭杨奚







                                                       
2012-01-15 19:51
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
我提供一种方法,大家积极贴代码啊
程序代码:
#include  <stdio.h>

#include  <string.h>

#include  <stdlib.h>

#include  <windows.h>

#define  N   101

int  main(int  argc, char  *argv[])

{
    int  n = 1, i, j, k;

    int   a1[N], a2[N];

 
    printf("input\toutput\n");

    while (n <= 50)
   
    {
         printf("%d\t", n);

         for (i = 0; i <= n; i++)

         {
            a1[i] = 1;

            a2[i] = 0;
         }

         for (i = 2; i <= n; i++)

         {
              for (j = 0; j <= n; j++)

               for (k = 0; k + j <= n; k += i)
           
                    a2[k + j] += a1[j]; 
         

            for (j = 0; j <= n; j++)

            {
                   a1[j] = a2[j];

                   a2[j] = 0;
            }

         }

    printf("%d\n", a1[n]);

    n++;

    if (n % 23 == 0)

        system("pause");

    }    

    return  0;
}










[ 本帖最后由 有容就大 于 2012-1-16 13:42 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-16 13:35
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 3楼 laoyang103
问下L版你的代码是在VC下编辑的吗,为什么我的平台无法识别bool foot[50];
memset(answer,0,sizeof(answer));
        memset(foot,0,sizeof(foot));


梅尚程荀
马谭杨奚







                                                       
2012-01-16 14:39
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 18楼 laoyang103
我用的就是vc6.0++怎么编译出好多错呢?

梅尚程荀
马谭杨奚







                                                       
2012-01-16 17:05
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
是不能识别bool型,我去网上看了下,说是C99才能识别bool型,而vc6.0++不支持C99.是真的吗?怎么查看自己的编译器是那个版本,支持哪些东西?
我的确实是vc6.0++ 绿化安装的。

[ 本帖最后由 有容就大 于 2012-1-16 18:46 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-16 18:44
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
哇咔咔,把扩展名改成.cpp就OK啦。那以前我都用.c做扩展名不是有很多限制?

梅尚程荀
马谭杨奚







                                                       
2012-01-16 18:49
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
上了代码,不是错的离谱就给分分哦。没上代码的朋友谢谢你们的交流和参与,下次争取给代码。

梅尚程荀
马谭杨奚







                                                       
2012-01-16 20:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359651-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.665137 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved